Leçon 7 / 9 — Chapitre 1: Classer avec ROW_NUMBER, RANK, DENSE_RANK
Comparer ROW_NUMBER, RANK et DENSE_RANK côte à côte
Calculer les trois fonctions dans une même requête rend leurs différences immédiatement visibles.
SELECT nom, anciennete,
ROW_NUMBER() OVER (ORDER BY anciennete DESC, id ASC) AS rn,
RANK() OVER (ORDER BY anciennete DESC) AS rk,
DENSE_RANK() OVER (ORDER BY anciennete DESC) AS dr
FROM employes WHERE equipe = 'support';
Sur l'équipe support (David 7 ans, Farid 7 ans, Elise 2 ans) :
| nom | anciennete | rn | rk | dr | |---|---|---|---|---| | David | 7 | 1 | 1 | 1 | | Farid | 7 | 2 | 1 | 1 | | Elise | 2 | 3 | 3 | 2 |
rn (ROW_NUMBER) distingue toujours David et Farid (1 et 2) grâce au départage par id. rk (RANK) leur donne le même rang (1) et saute le rang 2 pour Elise (rang 3). dr (DENSE_RANK) leur donne aussi le même rang (1), mais ne saute rien : Elise reçoit 2.
À retenir :
- Les trois fonctions s'accordent toujours sur les lignes sans ex-aequo ; elles ne divergent qu'en présence d'égalités.
ROW_NUMBERa besoin d'un départage pour rester déterministe ;RANKetDENSE_RANKn'en ont pas besoin, l'égalité étant justement le résultat voulu.- Choisir laquelle utiliser dépend de la question posée : « quelle place unique ? » (ROW_NUMBER), « quel rang, avec des trous après une égalité ? » (RANK), ou « quel rang, sans trou ? » (DENSE_RANK).
À vous de jouer : recalculez ce tableau à trois colonnes pour l'équipe ventes (Amara, Baptiste, Chloé).
Continuez ce module
Débloquez les leçons restantes ainsi que la certification finale.
2 500 XOF / 3,81 € / 4,15 $
Débloquez les 72 leçons restantes de ce module
Votre paiement est vérifié avant l'activation de l'accès