Menu
Coddy logo textTech

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.

challenge icon

Görev

Kolay

Mevcut 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 = 1 ifadesini WHERE rn <= 3 olarak değiştirin
  • Eşitliklere izin vermek için ROW_NUMBER() yerine RANK() 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
quiz iconKendini test et

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