Menu
Coddy logo textTech

Fonctions RANK & DENSE_RANK

Fait partie de la section Les fondamentaux du Journey SQL de Coddy. Leçon 65 sur 72.

ROW_NUMBER() est un type de fonction de classement, et il en existe deux autres : RANK() et DENSE_RANK().

La fonction RANK() numérote les lignes comme ROW_NUMBER(), mais elle attribue des numéros identiques aux mêmes lignes et ignore des numéros. DENSE_RANK() est similaire à RANK(), mais elle n’ignore pas de numéros.

Par exemple :

idniveau
15
26
36
47
57
65
SELECT id, 
	ROW_NUMBER() OVER (ORDER BY level) as row_num,
	RANK() OVER (ORDER BY level) as row_rank,
	DENSE_RANK() OVER (ORDER BY level) as row_dense_rank
FROM table1

Cela renverra :

idrow_numrow_rankrow_dense_rank
1111
6211
2332
3432
4553
5653

Explication :

  • ROW_NUMBER() : Toujours unique : 1, 2, 3, 4, 5, 6
  • RANK() :
    • niveau 5 (2 lignes) : les deux obtiennent le rang 1
    • niveau 6 (2 lignes) : les deux obtiennent le rang 3 (le 2 est ignoré)
    • niveau 7 (2 lignes) : les deux obtiennent le rang 5 (le 4 est ignoré)
  • DENSE_RANK() :
    • niveau 5 (2 lignes) : les deux obtiennent le rang 1
    • niveau 6 (2 lignes) : les deux obtiennent le rang 2 (aucun saut)
    • niveau 7 (2 lignes) : les deux obtiennent le rang 3 (aucun saut)
challenge icon

Défi

Facile

Tables et colonnes disponibles :

  • medals : region, medal_color, medal_count

Créez une requête qui affiche la région, le nombre total de médailles (somme de toutes les médailles, quelle que soit leur couleur) et deux types de classements :

  1. Un regular_rank (avec des écarts) sur la somme des médailles
  2. Un dense_rank (sans écarts) sur la somme des médailles

Ordonnez le résultat par :

order by total_medals desc, region asc

Essayez vous-même

quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Les fondamentaux

Entraînez-vous par vous-même : Playground SQL