Fonction ROW_NUMBER (SQL)

Noter ce cours :

Liens sponsorisés :

La fonction ROW_NUMBER est souvent méconnue des débutants en SQL, lesquels ont tendance à utiliser des solutions de contournements post SQL (Par exemple en PHP).

La fonction ROW_NUMBER permet d'attribuer un numéro d'ordre (numéro de ligne) selon un tri.

Dans l'exemple suivant, la requête calcule une numérotation pour chaque modèle de voiture en fonction de son prix.

SELECT ROW_NUMBER() OVER(ORDER BY V_PRIX) AS POSITION, V_MODELE, V_MARQUE, V_PRIX FROM VOITURE ORDER BY V_PRIX

Résultats de la requête :

La clause ORDER BY de la fonction ROW_NUMBER permet de préciser le critère de tri qui détermine la numérotation, tandis que la clause ORDER BY de la clause SELECT détermine dans quel ordre les résultats vont être retournés.

Il est également possible de retourner le numéro d'ordre selon la marque, pour cela il faut utiliser la clause PARTITION BY :

SELECT ROW_NUMBER() OVER(PARTITION BY V_MARQUE ORDER BY V_PRIX) AS POSITION, V_MODELE, V_MARQUE, V_PRIX
FROM VOITURE
ORDER BY V_PRIX

Résultats de la requête :

La numérotation est dans cet exemple partitionnée par marque.

Voici un exemple plus complexe qui permet de retourner le modèle le moins cher de chaque marque seulement en SQL (sans traitements avec un langage de programmation) :

Comme la fonction ROW_NUMBER() n'est pas directement utilisable dans une clause WHERE, il vaut donc passer par une CTE (Common Table Expression).

WITH MyCte AS
		(
		SELECT ROW_NUMBER() OVER(PARTITION BY V_MARQUE ORDER BY V_PRIX) AS POSITION, V_MODELE, V_MARQUE, V_PRIX
		FROM VOITURE
		)
		SELECT POSITION, V_MODELE, V_MARQUE, V_PRIX<br>
		FROM MyCte
		WHERE POSITION = 1
		ORDER BY V_PRIX

Résultats de la requête :

Vous avez aimé cet article intitulé Fonction ROW_NUMBER (SQL) ? Partagez-le !
Vulgarisation-informatique.com
Cours en informatique & tutoriels