Menu
Coddy logo textTech

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:

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

Bu şu şekilde dönecek:

idrow_numrow_rankrow_dense_rank
1111
6211
2332
3432
4553
5653

Açıklama:

  • ROW_NUMBER(): Her zaman benzersiz: 1, 2, 3, 4, 5, 6
  • RANK():
    • 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)
challenge icon

Görev

Kolay

Mevcut 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:

  1. Toplam madalyalar üzerinden (boşluklarla) bir regular_rank
  2. Toplam madalyalar üzerinden (boşluksuz) bir dense_rank

Sonucu şu şekilde sıralayın:

order by total_medals desc, region asc

Kopya kağıdı

SQL, bağlı değerlerle farklı şekilde davranan üç sıralama işlevi sağlar:

  • ROW_NUMBER() - benzersiz ardışık numaralar atar
  • RANK() - bağlı değerlere aynı sıralama atar ve sonraki sıralamaları atlar
  • DENSE_RANK() - bağlı değerlere aynı sıralama atar ve sıralamaları atlamaz

Örneğin:

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

Bu şunları döndürecektir:

idrow_numrow_rankrow_dense_rank
1111
6211
2332
3432
4553
5653

Kendin dene

quiz iconKendini test et

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