Résumé: dans ce tutoriel, vous apprendrez à utiliser la ROW_NUMBER()
pour attribuer un numéro séquentiel à chaque ligne dans un jeu de résultats de requête.
Présentation de la fonction SQL ROW_NUMBER ()
Le ROW_NUMBER()
est une fonction de fenêtre qui attribue un nombre entier séquentiel à chaque ligne de l’ensemble de résultats de la requête.
Ce qui suit illustre la syntaxe de la fonction ROW_NUMBER()
:
Dans cette syntaxe,
- Tout d’abord, la clause
PARTITION BY
divise l’ensemble de résultats renvoyé par laFROM
en partitions. La clausePARTITION BY
est facultative. Si vous l’omettez, l’ensemble du jeu de résultats est traité comme une seule partition. - Ensuite, la clause
ORDER BY
trie les lignes de chaque partition. Étant donné que laROW_NUMBER()
est une fonction sensible à l’ordre, la clauseORDER BY
est requise. - Enfin, chaque ligne de chaque la partition reçoit un nombre entier séquentiel appelé numéro de ligne. Le numéro de ligne est réinitialisé chaque fois que la limite de la partition est franchie.
Exemples SQL ROW_NUMBER ()
Nous utiliserons les employees
et departments
tables de la base de données exemple pour la démonstration:
A) Exemple SQL simple ROW_NUMBER ()
L’instruction suivante recherche le prénom, le nom et le salaire de tous les employés. De plus, il utilise la fonction ROW_NUMBER()
pour ajouter un nombre entier séquentiel à chaque ligne.
L’image suivante affiche l’ensemble de résultats partiel:
B ) Utilisation de SQL ROW_NUMBER () pour la pagination
La fonction ROW_NUMBER()
peut être utilisée pour la pagination. Par exemple, si vous souhaitez afficher tous les employés d’une table dans une application par pages, chaque page contenant dix enregistrements.
- Commencez par utiliser
ROW_NUMBER()
pour attribuer à chaque ligne un nombre entier séquentiel. - Deuxièmement, filtrez les lignes par page demandée. Par exemple, la première page a les lignes commençant de un à 9, et la deuxième page a les lignes commençant de 11 à 20, etc.
L’instruction suivante renvoie les enregistrements la deuxième page, chaque page a dix enregistrements.
Ce qui suit montre la sortie:
Si vous souhaitez utiliser l’expression de table commune (CTE) au lieu de la sous-requête, voici la requête:
C) Utilisation de SQL ROW_NUMBER () pour trouver la nième valeur la plus élevée par groupe
L’exemple suivant vous montre comment trouver les employés dont le salaire est le plus élevé dans leur service:
Dans la sous-requête:
- Premièrement, la clause
PARTITION BY
répartit les employés par services. - Deuxièmement, la
ORDER BY
La clause trie l’employé de chaque service par salaire dans l’ordre décroissant. - Troisièmement, la
ROW_NUMBER()
attribue à chaque ligne un nombre entier séquentiel . Il réinitialise le numéro lorsque le département change.
Ce qui suit montre l’ensemble de résultats de la sous-requête:
Dans la requête externe, nous avons sélectionné uniquement les lignes d’employés qui ont le row_num
avec la valeur 1.
Voici la sortie de l’ensemble de la requête:
Si vous modifiez le prédicat dans la clause WHERE
de 1 à 2, 3, etc., vous obtiendrez les employés qui ont le deuxième salaire le plus élevé, le troisième salaire le plus élevé, etc.
Dans ce didacticiel, vous avez appris à utiliser la fonction SQL ROW_NUMBER()
pour attribuer une séquence nombre entier de chaque ligne de l’ensemble de résultats d’une requête.
- Ce didacticiel vous a-t-il été utile?
- OuiNon