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 :
| id | level |
| 1 | 5 |
| 2 | 6 |
| 3 | 6 |
| 4 | 7 |
| 5 | 7 |
| 6 | 5 |
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 table1Cela renverra :
| id | row_num | row_rank | row_dense_rank |
| 1 | 1 | 1 | 1 |
| 6 | 2 | 1 | 1 |
| 2 | 3 | 3 | 2 |
| 3 | 4 | 3 | 2 |
| 4 | 5 | 5 | 3 |
| 5 | 6 | 5 | 3 |
Explication :
ROW_NUMBER(): Toujours unique : 1, 2, 3, 4, 5, 6RANK():- 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)
Défi
FacileTables 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 :
- Un
regular_rank(avec des écarts) sur la somme des médailles - Un
dense_rank(sans écarts) sur la somme des médailles
Trier le résultat par :
order by total_medals desc, region ascAide-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 uniquesRANK()- attribue le même rang aux valeurs égales et saute les rangs suivantsDENSE_RANK()- attribue le même rang aux valeurs égales sans sauter les rangs
Par exemple :
| id | level |
| 1 | 5 |
| 2 | 6 |
| 3 | 6 |
| 4 | 7 |
| 5 | 7 |
| 6 | 5 |
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 table1Cela retournera :
| id | row_num | row_rank | row_dense_rank |
| 1 | 1 | 1 | 1 |
| 6 | 2 | 1 | 1 |
| 2 | 3 | 3 | 2 |
| 3 | 4 | 3 | 2 |
| 4 | 5 | 5 | 3 |
| 5 | 6 | 5 | 3 |
Essayez vous-même
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
4More Keywords
The IN keywordThe BETWEEN keywordThe LIKE keywordThe AS keywordRecap - Cellphone Models2Conditions
Conditions BasicsThe AND keywordThe OR keywordThe NOT keywordMultiple Conditions CombinedParenthesisBooleans5Arithmetic Operations
Mathematical OperatorsMathematical ColumnsThe Modulo OperationThe ROUND() Function3Specific Return Format
Null valuesSort Results Part 1Sort Results Part 2Recap - Cyber Security FirmLimit number of recordsRecap - Vehicle Factory6Intro Challenges
Recap - Parliamentary ElectionRecap - Police Criminal ArrestRecap - Bar Beverage ContainerRecap - Engineer new columns9Multiple tables
Basic Join Part 1Basic Join Part 2Recap - JoinSelf joinRecap - Self JoinUnionSimplify queries, WITH keywordRecap - With QueriesRecap - Real Estate Contractor12Window Functions part 2
RANK & DENSE_RANK FunctionsRecap - RANK & DENSE_RANKNTILE FunctionAggregation FunctionsROWS & RANGE Criterion