İlk N İçindeki Eşitlikleri Ele Alma
Eşit satırların tümünü dahil etmek için RANK veya DENSE_RANK'in ne zaman kullanılacağını öğrenin.
İlk N İçindeki Eşitlikleri Ele Alma, CoddyKit'te ücretsiz bir SQL Interview Prep dersidir. Bu, 4 dersinin 2. 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, SQL Interview Prep öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. SQL Interview Prep kursu toplamda 4 dersten oluşur.
Eşitlik Durumunda Sorulan Devam Sorusu
ROW_NUMBER ile en yüksek N sorgusunu başarıyla çözdüğünüzde, mülakat yapan kişi zor soruyu sorar: "Sınırda iki çalışanın maaşı tamamen aynıysa ikisi de dahil edilmeli mi?"
Bu soru, tek bir sorguyu ezberleyen adaylarla sıralama mantığını anlayan adayları birbirinden ayırır. Yanıt, ROW_NUMBER, RANK ve DENSE_RANK arasından seçim yapmaya bağlıdır. Bu ders, her işlevi ilgili iş gereksinimiyle eşleştirir.
ROW_NUMBER Eşitlikleri Gizler
ROW_NUMBER, her satıra kesinlikle benzersiz bir tamsayı atar. Sıralama sütununda iki satır eşit olsa bile biri 2, diğeri ise keyfi bir sırayla 3 olur.
Sonuç olarak WHERE rn <= 3 filtresi tam olarak 3 satır döndürür ve dahil edilmesi gereken eşit maaşlı bir satırı sessizce dışarıda bırakabilir. Gerçekten sabit bir sayı istediğinizde bu doğrudur; ancak eşit satırların tümünün uygun sayılması gerektiğinde yanlıştır.
-- Salaries: 100, 90, 90, 80
-- ROW_NUMBER -> 1, 2, 3, 4 (the two 90s get 2 and 3 arbitrarily)
ROW_NUMBER() OVER (ORDER BY salary DESC)RANK Boşluk Bırakır
RANK, eşit satırlara aynı sıralamayı verir, ardından eşitlikleri hesaba katmak için sonraki değerleri atlar. Sıralamada iki satır 2'de eşitse ikisi de 2 olur ve sonraki satır 3 yerine 4. sıraya geçer.
Bir konumda birden fazla kişinin bulunabildiği "en yüksek 3 konum" ifadesi için RANK kullanın. Bu, iki gümüş madalyalının bronz madalyalı olmadığı gerçek yarışma sıralamalarını taklit eder.
-- Salaries: 100, 90, 90, 80
-- RANK -> 1, 2, 2, 4 (rank 3 is skipped)
RANK() OVER (ORDER BY salary DESC)DENSE_RANK Boşluk Bırakmaz
DENSE_RANK de eşit satırlara aynı sıralamayı verir, ancak sonrasında atlama yapmaz. 2. sırada eşit olan iki satırın ikisi de 2 olur ve sonraki farklı değer 3 olur.
Soru farklı değerlere ilişkin olduğunda DENSE_RANK kullanın: "maaşı en yüksek 3 farklı düzey" veya "en yüksek 3 fiyat kademesi" gibi. Satırları değil, benzersiz değerleri sayar.
-- Salaries: 100, 90, 90, 80
-- DENSE_RANK -> 1, 2, 2, 3 (no gap)
DENSE_RANK() OVER (ORDER BY salary DESC)Yan Yana Karşılaştırma
100, 90, 90, 80 maaş listesi için üç işlev şu sonuçları üretir:
- ROW_NUMBER: 1, 2, 3, 4
- RANK: 1, 2, 2, 4
- DENSE_RANK: 1, 2, 2, 3
Bu tabloyu eksiksiz biçimde ezberlemeye değer. Mülakat yapan kişi sizden belirli bir liste için tabloyu doldurmanızı isteyebilir; boşluk davranışını doğru uygulamak bu sorunun temel amacıdır.
SELECT salary,
ROW_NUMBER() OVER (ORDER BY salary DESC) AS rn,
RANK() OVER (ORDER BY salary DESC) AS rnk,
DENSE_RANK() OVER (ORDER BY salary DESC) AS drnk
FROM employees;RANK ile Eşit Satırların Tümünü Dahil Etme
"En yüksek 3 olsun, ancak sınırda eşit olan herkesi dahil edin" sorusunu yanıtlamak için RANK() <= 3 filtresini kullanın. İki kişi 3. sırayı paylaşıyorsa ikisi de görünür; bu nedenle sonuç 3 satırdan fazla içerebilir.
Bu, "herhangi 3 satır" yerine "en yüksek 3 konum" şeklinde ifade edilen soruların amacıdır. Eşitlik oluştuğunda satır sayısının N değerini aşabileceğini açıkça belirtin.
WITH ranked AS (
SELECT name, department, salary,
RANK() OVER (
PARTITION BY department ORDER BY salary DESC
) AS rnk
FROM employees
)
SELECT name, department, salary, rnk
FROM ranked
WHERE rnk <= 3
ORDER BY department, rnk;DENSE_RANK ile En Yüksek 3 Farklı Düzey
Gereksinim "maaşı en yüksek 3 farklı düzey" olduğunda ve bu üç düzeydeki her çalışanı istediğinizde DENSE_RANK() <= 3 kullanın.
Bu, çok sayıda satır döndürebilir: en yüksek üç maaş kademesindeki tüm çalışanlar, bu kademelerde kaç kişi olduğundan bağımsız olarak sonuçta yer alır. Temel fikir, DENSE_RANK'in farklı değerleri saymasıdır; dolayısıyla filtre sabit sayıda satır yerine değer katmanlarını seçer.
WITH ranked AS (
SELECT name, salary,
DENSE_RANK() OVER (ORDER BY salary DESC) AS drnk
FROM employees
)
SELECT name, salary, drnk
FROM ranked
WHERE drnk <= 3
ORDER BY drnk;Karar Rehberi
İfadeyi işleve eşleştirin:
- "Tam olarak N satır" veya sayfalama →
ROW_NUMBER(bir eşitlik bozucu ekleyin). - "En yüksek N konum, eşitler aynı konumu paylaşır" →
RANK. - "En yüksek N farklı değer/düzey/kademe" →
DENSE_RANK.
Gereksinim belirsizse şunu sorun: "Sınırda bir eşitlik varsa eşit satırların tümünü dahil etmeli miyim, yoksa sonucu N ile mi sınırlandırmalıyım?" Bu netleştirme sorusu bile puan kazandırır.
Eşitlik Bozucular Yine de Önemlidir
RANK veya DENSE_RANK kullansanız bile ikincil bir ORDER BY anahtarı eklemek, eşit satırların görüntülenme sırasını belirler ve çıktıyı kararlı tutar. Hangi satırların uygun sayılacağını değiştirmez, ancak sonuçların yeniden üretilebilir olmasını sağlar.
ROW_NUMBER ile eşitlik bozucu zorunludur; çünkü rn sınırında eşit satırlardan hangisinin kalacağını belirler.
RANK() OVER (
PARTITION BY department
ORDER BY salary DESC, name ASC
) AS rnkUygulama Örneği: En Yüksek Puanlılar
Bir game_scores tablosunda player ve score sütunları bulunuyor. Mülakat yapan kişi "en yüksek 2 puan konumundaki tüm oyuncuları" istiyor. Birincilikte eşitlik varsa iki oyuncu 1. konumda olur, ardından sonraki farklı puan 2. konuma gelir.
Eşitlikten sonra atlama olmayan "konumlar" ifadesi DENSE_RANK'e işaret eder. Bunun yerine "atlamalı en yüksek 2 sıralama" denilseydi RANK kullanırdınız. Tam ifadeyi dikkatle dinleyin.
WITH r AS (
SELECT player, score,
DENSE_RANK() OVER (ORDER BY score DESC) AS pos
FROM game_scores
)
SELECT player, score, pos
FROM r
WHERE pos <= 2
ORDER BY pos, player;Kaçınılması Gereken Yaygın Hatalar
Mülakat yapanların dikkat ettiği hatalar:
- Soru eşitliklerin dahil edilmesini istediği hâlde
ROW_NUMBERkullanarak uygun bir satırı sessizce dışarıda bırakmak. RANKileDENSE_RANK'in boşluk davranışını karıştırmak.RANK/DENSE_RANKfiltrelerinin N değerinden fazla satır döndürebileceğini unutup sonucun yanlış olduğunu iddia etmek.- En yüksek N grup başına istendiğinde
PARTITION BYifadesini atlayarak bunun yerine tüm tabloyu sıralamak.
Hızlı Kontrol
Açıklanan eşitlik davranışı için doğru sıralama işlevini seçin.
Özet: Eşitlikleri Ele Alma
Üç işlev, üç eşitlik davranışı:
- ROW_NUMBER: her zaman tektir, tam N satır döndürür, eşitlikleri keyfi biçimde bozar.
- RANK: eşit değerler aynı sırayı paylaşır, ardından boşluklar oluşur.
- DENSE_RANK: eşit değerler aynı sırayı paylaşır, boşluk oluşmaz ve birbirinden farklı değerleri sayar.
Seçiminizi sorunun ifadesine göre yapın, belirsizse açıklayıcı bir soru sorun ve RANK/DENSE_RANK filtrelerinin tasarım gereği N'den fazla satır döndürebileceğini unutmayın.
Sıkça Sorulan Sorular
“İlk N İçindeki Eşitlikleri Ele Alma” dersi ücretsiz mi?
Evet — “İlk N İçindeki Eşitlikleri Ele Alma” 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 SQL Interview Prep kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. SQL Interview Prep kursu toplamda 4 dersten oluşur.
“İlk N İçindeki Eşitlikleri Ele Alma” dersinde ne öğreneceğim?
Eşit satırların tümünü dahil etmek için RANK veya DENSE_RANK'in ne zaman kullanılacağını öğrenin. SQL 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.
SQL Interview Prep öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te SQL 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 2. dersidir.
“İlk N İçindeki Eşitlikleri Ele Alma” 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 SQL Interview Prep dersinde kod yazıp çalıştırabilir miyim?
Evet. Her SQL 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
- ROW_NUMBER ile Grup Başına İlk N Satır
- İlk N İçindeki Eşitlikleri Ele Alma
- Satırların Güvenli Tekilleştirilmesi
- Anahtar Başına En Güncel Satırı Koruma