PaliSkill
SQL — Fonctions de fenêtrage

Leçon 6 / 9 — Chapitre 1: Classer avec ROW_NUMBER, RANK, DENSE_RANK

RANK() et DENSE_RANK() : gérer les ex-aequo

RANK() et DENSE_RANK() gèrent les ex-aequo différemment de ROW_NUMBER() : deux lignes à égalité reçoivent le même rang.

SELECT nom, equipe, anciennete,
  RANK() OVER (PARTITION BY equipe ORDER BY anciennete DESC) AS rang
FROM employes;

Dans l'équipe support, David et Farid sont ex-aequo à 7 ans : tous deux reçoivent le rang 1. Elise, la seule autre du groupe, ne reçoit pas le rang 2, mais le rang 3 — RANK() saute un rang pour chaque ligne ex-aequo.

SELECT nom, equipe, anciennete,
  DENSE_RANK() OVER (PARTITION BY equipe ORDER BY anciennete DESC) AS rang
FROM employes;

DENSE_RANK() ne saute rien : Elise reçoit ici le rang 2, directement après le rang 1 partagé par David et Farid.

À retenir :

  • RANK() attribue le même rang aux lignes ex-aequo, puis saute autant de rangs que de lignes à égalité pour la suivante.
  • DENSE_RANK() attribue aussi le même rang aux ex-aequo, mais ne saute jamais de rang pour la ligne suivante.
  • ROW_NUMBER() (leçon 2), lui, ne laisse jamais deux lignes avec le même numéro, même en cas d'égalité.

À vous de jouer : recalculez RANK() et DENSE_RANK() pour l'équipe ventes (Amara, Baptiste, Chloé) et comparez.

🔒

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