Grup Başına İlk N
Coddy'nin SQL Journey'sinin Temellerin Ötesi bölümünün bir parçası — ders 23 / 27.
"Departman başına en yüksek maaşlı çalışan" klasik bir örnektir. Yöntem her zaman bir PARTITION BY ile ROW_NUMBER() kullanmak, ardından 1. satıra göre filtrelemektir.
WITH ranked AS (
SELECT name, department, salary,
ROW_NUMBER() OVER (PARTITION BY department ORDER BY salary DESC) AS rn
FROM employees
)
SELECT name, department, salary FROM ranked WHERE rn = 1İlk 1 yerine ilk 3'ü mü istiyorsunuz? WHERE rn = 1 ifadesini WHERE rn <= 3 olarak değiştirin. Zirvedeki beraberliklere izin vermek mi istiyorsunuz? ROW_NUMBER() yerine RANK() kullanın.
Görev
KolayMevcut tablolar ve sütunlar:
<strong>employees</strong>:<strong>id</strong>,<strong>name</strong>,<strong>department</strong>,<strong>salary</strong>
Her bir department içindeki en yüksek maaşlı çalışanı döndürün. name, department ve salary bilgilerini department sütununa göre sıralı olarak çıktı verin. Bir departman içinde en yüksek maaş için iki çalışan arasında eşitlik varsa, sadece birini döndürün: id değeri daha düşük olanı.
Kopya kağıdı
Grup başına en üstteki N satırı almak için, PARTITION BY ile ROW_NUMBER() kullanın, ardından filtreleyin:
WITH ranked AS (
SELECT name, department, salary,
ROW_NUMBER() OVER (PARTITION BY department ORDER BY salary DESC) AS rn
FROM employees
)
SELECT name, department, salary FROM ranked WHERE rn = 1- En üstteki 3 için
WHERE rn = 1ifadesiniWHERE rn <= 3olarak değiştirin - Eşitliklere izin vermek için
ROW_NUMBER()yerineRANK()kullanın
Kendin dene
WITH ranked AS (
-- ROW_NUMBER() OVER (PARTITION BY department ORDER BY ...)
)
SELECT name, department, salary FROM ranked WHERE rn = 1
ORDER BY department
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Temellerin Ötesi bölümündeki tüm dersler
2String Fonksiyonları
LENGTH, UPPER, LOWERSUBSTRINSTRREPLACE ve TRIM|| ile BirleştirmeÖzet - Faturalar6Analitik Tarifleri
Grup Başına İlk NToplamın YüzdesiKümülatif ToplamAnahtar Başına Tek Satır TutmaÖzet - En İyi Müşteriler