RANK & DENSE_RANK Functions
Coddy'nin SQL Journey'sinin Temeller bölümünün bir parçası — ders 65 / 72.
ROW_NUMBER(), sıralama fonksiyonlarının bir türüdür ve iki tane daha vardır: RANK() ve DENSE_RANK().
RANK() fonksiyonu ROW_NUMBER() gibi satırları numaralandırır, ancak aynı satırlar için aynı numaraları verir ve numaraları atlar. DENSE_RANK(), RANK()'a benzer, ancak numaraları atlamaz.
Örneğin:
| 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 table1Bu şu şekilde dönecek:
| 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 |
Açıklama:
ROW_NUMBER(): Her zaman benzersiz: 1, 2, 3, 4, 5, 6RANK():- seviye 5 (2 satır): her ikisi de sıralama 1 alır
- seviye 6 (2 satır): her ikisi de sıralama 3 alır (2'yi atlar)
- seviye 7 (2 satır): her ikisi de sıralama 5 alır (4'ü atlar)
DENSE_RANK():- seviye 5 (2 satır): her ikisi de sıralama 1 alır
- seviye 6 (2 satır): her ikisi de sıralama 2 alır (atlamaz)
- seviye 7 (2 satır): her ikisi de sıralama 3 alır (atlamaz)
Görev
KolayMevcut tablolar ve sütunlar:
<strong>medals</strong>:<strong>region</strong>,<strong>medal_color</strong>,<strong>medal_count</strong>
Bölgeyi, toplam madalya sayısını (renk fark etmeksizin tüm madalyaların toplamı) ve iki tür sıralamayı gösteren bir sorgu oluşturun:
- Toplam madalyalar üzerinden (boşluklarla) bir
regular_rank - Toplam madalyalar üzerinden (boşluksuz) bir
dense_rank
Sonucu şu şekilde sıralayın:
order by total_medals desc, region ascKopya kağıdı
SQL, bağlı değerlerle farklı şekilde davranan üç sıralama işlevi sağlar:
ROW_NUMBER()- benzersiz ardışık numaralar atarRANK()- bağlı değerlere aynı sıralama atar ve sonraki sıralamaları atlarDENSE_RANK()- bağlı değerlere aynı sıralama atar ve sıralamaları atlamaz
Örneğin:
| 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 table1Bu şunları döndürecektir:
| 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 |
Kendin dene
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Temeller bölümündeki tüm dersler
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