Ana içeriğe geç
Kesit SQL
Orta · Pencere Fonksiyonları

Sıralama: ROW_NUMBER, RANK, DENSE_RANK

Sıra numarası vermek ve her gruptaki ilk N kaydı bulmak.

Uygulamada aç, 9 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

Üç sıralama fonksiyonu

MaaşROW_NUMBERRANKDENSE_RANK
90.000111
80.000222
80.000322
70.000443
SELECT first_name, dept_id, salary,
       RANK() OVER (PARTITION BY dept_id ORDER BY salary DESC) AS dept_sira
FROM employees
WHERE dept_id IS NOT NULL;

Her gruptaki ilk N: en sık sorulan mülakat sorusu

“Her kategorinin en pahalı 2 ürünü” gibi sorular için sırala, sonra dış sorguda filtrele:

WITH s AS (
  SELECT category, name, price,
         ROW_NUMBER() OVER (PARTITION BY category ORDER BY price DESC) AS rn
  FROM products
)
SELECT category, name, price
FROM s
WHERE rn <= 2
ORDER BY category, rn;
TekilleştirmeAynı kaydın birden çok versiyonu varken en günceli seçmek için de bu kalıp kullanılır: ROW_NUMBER() OVER (PARTITION BY anahtar ORDER BY guncelleme DESC) = 1.

Derinleş: hangi sıralama fonksiyonu?

İstekFonksiyon
Grup başına tam olarak N satırROW_NUMBER (eşitlikte ikinci sıralama anahtarı ekle)
Eşitlerin hepsi dahil “ilk N değer”DENSE_RANK
Yarışma sıralaması (1, 1, 3)RANK
Tekrarlı kayıtlardan birini seçmekROW_NUMBER … = 1
Alıştırmalara geç (9)