Menu
Coddy logo textTech

RANK & DENSE_RANK Functions

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 y en a deux de plus : RANK() et DENSE_RANK().

La fonction RANK() numérote les lignes comme ROW_NUMBER(), mais elle attribue des numéros identiques aux lignes identiques et saute des numéros. DENSE_RANK() est similaire à RANK(), mais elle ne saute pas de numéros.

Par exemple :

idlevel
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 (saute 2)
    • niveau 7 (2 lignes) : les deux obtiennent le rang 5 (saute 4)
  • DENSE_RANK() :
    • niveau 5 (2 lignes) : les deux obtiennent le rang 1
    • niveau 6 (2 lignes) : les deux obtiennent le rang 2 (pas de saut)
    • niveau 7 (2 lignes) : les deux obtiennent le rang 3 (pas de saut)
challenge icon

Défi

Facile

Tables et colonnes disponibles :

  • <strong>medals</strong>: <strong>region</strong>, <strong>medal_color</strong>, <strong>medal_count</strong>

Créez une requête qui affiche la région, le nombre total de médailles (somme de toutes les médailles indépendamment de la 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

Trier le résultat par :

order by total_medals desc, region asc

Aide-mémoire

SQL fournit trois fonctions de classement qui se comportent différemment avec les valeurs égales :

  • ROW_NUMBER() - attribue des numéros séquentiels uniques
  • RANK() - attribue le même rang aux valeurs égales et saute les rangs suivants
  • DENSE_RANK() - attribue le même rang aux valeurs égales sans sauter les rangs

Par exemple :

idlevel
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 retournera :

idrow_numrow_rankrow_dense_rank
1111
6211
2332
3432
4553
5653

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