PaliSkill
SQL — Fonctions de fenêtrage

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_NUMBER a besoin d'un départage pour rester déterministe ; RANK et DENSE_RANK n'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