Passer au contenu principal
eLearner.app
Module 13 · Leçon 3 sur 451/57 dans le cours~15 min
Leçons du module (3/4)

Classements : ROW_NUMBER, RANK et DENSE_RANK

Classements : ROW_NUMBER, RANK et DENSE_RANK

Au-delà de l'agrégation, les fonctions de fenêtre brillent dans le classement et le classement. Il existe des fonctions conçues spécifiquement pour fonctionner à l'intérieur des fenêtres (OVER() devient obligatoire) qui attribuent des numéros séquentiels ou des positions de classement.

Pour les faire fonctionner par rapport à un critère, nous devons utiliser la clause ORDER BY à l'intérieur de OVER().

Le trio de classement

  1. ROW_NUMBER() : attribue un numéro séquentiel simple (1, 2, 3...) à chaque ligne, brisant arbitrairement les égalités.
  2. RANK() : Produit l'effet "Olympiques" : 1, 2, 2, 4. Il laisse un vide (le "3" est sauté) et attribue le même rang en cas d'égalité.
  3. DENSE_RANK() : Densifie les rangs : 1, 2, 2, 3. Il n'y a jamais d'écart après une égalité.
SQL
SELECT
  product_name,
  price,
  RANK() OVER(ORDER BY price DESC) AS price_rank
FROM products;

En combinant PARTITION BY et ORDER BY ensemble dans OVER(), nous pouvons obtenir « le top 3 pour chaque catégorie » !

Exercice#sql.m13.l3.e1
Tentatives : 0Chargement…

Extrayez « prénom », « nom de famille » et « id » de la table clients (« clients ») (en supposant que « id » soit le numéro d'identification). Ajoutez une colonne « rang » en utilisant DENSE_RANK() basée sur « id » décroissant (du plus élevé au plus bas).

Chargement de l'éditeur…
Afficher l'indice

DENSE_RANK() OVER(ORDER BY id DESC).

Solution disponible après 3 tentatives

Exercice#sql.m13.l3.e2
Tentatives : 0Chargement…

Créez un classement pour chaque «category_id» en fonction du prix des produits («products»). Extrayez 'category_id', 'id', 'price' et ajoutez 'price_rank' à l'aide de ROW_NUMBER() dans l'ordre décroissant du 'price', en partitionnant par 'category_id'.

Chargement de l'éditeur…
Afficher l'indice

Combinez PARTITION BYcategory_id ORDER BY prix DESC à l'intérieur du OVER.

Solution disponible après 3 tentatives