Eşitliklerde RANK ve DENSE_RANK Karşılaştırması
Değerler eşit olduğunda aralıklı ve aralıksız sıralama arasındaki farkı öğrenin.
Eşitliklerde RANK ve DENSE_RANK Karşılaştırması, CoddyKit'te ücretsiz bir Coding Interview Prep dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Coding Interview Prep öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Coding Interview Prep kursu toplamda 4 dersten oluşur.
Üç Sıralama İşlevi Yan Yana
SQL size üç sıralama pencere işlevi sunar ve en sık sorulan pencere sorusu, bu işlevlerin eşitliklerde nasıl farklılaştığıdır:
- ROW_NUMBER — her zaman benzersizdir; eşitliklerde keyfi farklı numaralar verilir.
- RANK — eşitliklerde aynı sıra paylaşılır, ardından gelen sıra boşluk bırakır.
- DENSE_RANK — eşitliklerde aynı sıra paylaşılır, ardından gelen sıra boşluk bırakmaz.
Bu ayrımı anında açıklayabilmek, mülakatlarda güvenilir bir yetkinlik göstergesidir.
Somut Bir Örnek Tablo
Azalan sırada düzenlenmiş beş puan düşünün: 100, 90, 90, 80, 70. Her işlevin bunları nasıl numaralandırdığına bakın.
- ROW_NUMBER: 1, 2, 3, 4, 5
- RANK: 1, 2, 2, 4, 5 (eşitlikten sonra 3'ü atlar)
- DENSE_RANK: 1, 2, 2, 3, 4 (atlama yok)
Bu 100/90/90/80/70 örneğini aklınızda tutun; soruyu anında yanıtlamanızı sağlar.
SELECT
score,
ROW_NUMBER() OVER (ORDER BY score DESC) AS rownum,
RANK() OVER (ORDER BY score DESC) AS rnk,
DENSE_RANK() OVER (ORDER BY score DESC) AS dense
FROM scores;RANK Boşluğu Nasıl Hesaplar
RANK, her satıra sıralamada kendisinden kesin olarak önce gelen satırların sayısının bir fazlasına eşit bir sıra atar. 90 değerinde eşit olan iki satırın her birinden önce bir satır (100) bulunduğundan, ikisi de 2. sırayı alır. Sonraki, daha düşük değer kendisinden önce gelen üç satır bulunduğu için 4. sıraya atlar.
Bu nedenle RANK, müsabaka puanlamasını yansıtır: eşit gümüş madalya sahipleri vardır, bronz madalya yoktur.
-- scores 100,90,90,80 -> RANK = 1,2,2,4
SELECT score, RANK() OVER (ORDER BY score DESC) AS rnk
FROM scores;DENSE_RANK Boşluğu Nasıl Önler
DENSE_RANK, geçerli değerden önce gelen farklı değerlerin sayısının bir fazlasına eşit bir sıra atar. 90'daki eşitlikten sonra 80'den önce yalnızca iki farklı değer (100 ve 90) bulunduğundan, 80 değeri 3. sırayı alır; boşluk oluşmaz.
"İkinci en yüksek maaş" gibi, eşit değerlerin bir kez sayılması gereken durumlarda DENSE_RANK kullanın.
-- scores 100,90,90,80 -> DENSE_RANK = 1,2,2,3
SELECT score, DENSE_RANK() OVER (ORDER BY score DESC) AS dense
FROM scores;Her İşlevi Ne Zaman Seçmeli
Mülakat yapanların duymaktan hoşlandığı hızlı karar rehberi:
- Her sıra için tam olarak bir satıra mı ihtiyacınız var (en güncel kayıt, sayfalama)? → ROW_NUMBER.
- Eşitliklerde aynı sıranın, aralıklarda doğru boşlukların korunduğu bir sıralamaya mı ihtiyacınız var (spor sıralaması, eşitlikler dahil ilk 3)? → RANK.
- N'inci farklı değere mi ihtiyacınız var (N'inci en yüksek maaş)? → DENSE_RANK.
Yanlış seçim, döndürülen satırları değiştirir; bu nedenle seçiminizi sesli olarak gerekçelendirin.
Bölümler İçinde Sıralama
Üç işlev de her grup içinde bağımsız olarak sıralama yapmak için PARTITION BY kabul eder. Her bölümde sıra 1'den yeniden başlar.
Burada her departman, kendi çalışanlarını maaşa göre sıralar ve eşitlikler DENSE_RANK ile ele alınır. Her departmandaki en yüksek maaşlı çalışan 1. sıradadır ve aynı maaşı alan çalışanlar aynı sırayı paylaşır.
SELECT
department,
name,
salary,
DENSE_RANK() OVER (
PARTITION BY department
ORDER BY salary DESC
) AS salary_rank
FROM employees;Uygulamalı Örnek: Eşitlikler Dahil İlk 3
"Departman başına en yüksek 3 maaşı döndürün; birkaç kişi üçüncü sırada eşitse hepsini dahil edin." Bunun için ROW_NUMBER değil, RANK veya DENSE_RANK gerekir.
DENSE_RANK <= 3 kullanmak, en yüksek üç farklı maaş düzeyini ve bu düzeylerdeki tüm çalışanları korur — "eşitlikler dahil" ifadesinin anlamı tam olarak budur.
SELECT department, name, salary, salary_rank
FROM (
SELECT department, name, salary,
DENSE_RANK() OVER (
PARTITION BY department ORDER BY salary DESC
) AS salary_rank
FROM employees
) t
WHERE salary_rank <= 3;Uygulamalı Örnek: İkinci En Yüksek Maaş
En meşhur SQL mülakat sorusu. Sağlam çözüm, en yüksek maaşların yinelenmesi nedeniyle gerçek ikinci değerin erişilemez hâle gelmesini önlemek için DENSE_RANK kullanır.
En yüksek maaşı üç kişi alıyorsa DENSE_RANK = 2 sonraki farklı maaşı doğru şekilde belirler; buna karşılık ROW_NUMBER = 2 yalnızca başka bir en yüksek maaşlı çalışanı döndürür.
SELECT DISTINCT salary AS second_highest
FROM (
SELECT salary, DENSE_RANK() OVER (ORDER BY salary DESC) AS dr
FROM employees
) t
WHERE dr = 2;N'inci En Yüksek Değer İçin RANK ile DENSE_RANK Karşılaştırması
N'inci en yüksek değer sorularında neden RANK yerine DENSE_RANK kullanılır? Çünkü RANK aralıklarda boşluk bırakır. Maaşlar 100, 100, 90 olduğunda 90 değerinin RANK = 3, ancak DENSE_RANK = 2 olur.
Soru "2. en yüksek farklı maaşı" istiyorsa RANK = 2 ile filtreleme hiçbir sonuç döndürmez; DENSE_RANK = 2 ise doğru şekilde 90 değerini döndürür. "N'inci farklı" ifadesini her zaman DENSE_RANK ile eşleştirin.
-- salaries 100,100,90
-- RANK: 1,1,3 -> WHERE rank = 2 returns NOTHING
-- DENSE_RANK: 1,1,2 -> WHERE dense_rank = 2 returns 90SQL Lehçeleri Arası Notlar
İyi haber: ROW_NUMBER, RANK ve DENSE_RANK SQL standardına uygundur ve PostgreSQL, SQL Server, Oracle, MySQL 8+, BigQuery ve Snowflake'te aynı şekilde çalışır. Yukarıda açıklanan eşitlik kuralları evrenseldir.
İlgili bir işlev olan PERCENT_RANK, 0 ile 1 arasında göreli bir konum vermek için RANK üzerine kuruludur — bir mülakat yapan yüzdelik sıralamayı sorarsa bundan bahsetmeniz faydalı olur.
Yaygın Hatalar
Şunlara dikkat edin:
- "N'inci en yüksek" sorularında
ROW_NUMBERkullanıp eşit sıradaki satırları kaçırmak. - Soru farklı değerleri istediği hâlde
RANKkullanmak ve aralıklardan dolayı boş sonuçlar almak. OVERiçindeORDER BYkullanmayı unutmak — onsuz sıralamanın anlamı yoktur.- Sıralamayı dış sorgu yerine doğrudan
WHEREiçinde filtrelemek.
Hızlı Kontrol
Eşitlik kurallarını uygulayın.
Özet: Boşluklu ve Boşluksuz Sıralama
Artık doğru sıralama işlevini anında seçebilirsiniz:
- ROW_NUMBER: benzersiz numaralar, ortak sıra yok.
- RANK: eşitlikler aynı sırayı paylaşır, ardından boşluk oluşur (1,2,2,4).
- DENSE_RANK: eşitlikler aynı sırayı paylaşır, boşluk oluşmaz (1,2,2,3).
- "N'inci en yüksek farklı değer" →
DENSE_RANK; "eşitlikler dahil ilk N" →RANK/DENSE_RANK; "her sıra için bir satır" →ROW_NUMBER.
Sırada, pencere sonucunu nasıl filtreleyeceğinizi göreceksiniz; çünkü bunu WHERE içinde yapamazsınız.
Yapay zeka eğitmeniyle Coding Interview Prep öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 90
- Dersler
- 360
Sıkça Sorulan Sorular
“Eşitliklerde RANK ve DENSE_RANK Karşılaştırması” dersi ücretsiz mi?
Evet — “Eşitliklerde RANK ve DENSE_RANK Karşılaştırması” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Coding Interview Prep kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Coding Interview Prep kursu toplamda 4 dersten oluşur.
“Eşitliklerde RANK ve DENSE_RANK Karşılaştırması” dersinde ne öğreneceğim?
Değerler eşit olduğunda aralıklı ve aralıksız sıralama arasındaki farkı öğrenin. Coding Interview Prep ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Coding Interview Prep öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Coding Interview Prep, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“Eşitliklerde RANK ve DENSE_RANK Karşılaştırması” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Coding Interview Prep dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Coding Interview Prep dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- OVER, PARTITION BY ve ORDER BY
- Benzersiz Sıralama için ROW_NUMBER
- Eşitliklerde RANK ve DENSE_RANK Karşılaştırması
- Pencere Sonucuna Göre Filtreleme