Window function nedir? ROW_NUMBER, RANK ve DENSE_RANK arasındaki fark nedir?

Cevap

Window function, GROUP BY gibi satırları tek satıra indirgemeden, her satır için ilişkili bir satır kümesi (pencere) üzerinde hesap yapar. OVER (...) ifadesiyle tanımlanır.

SELECT ad, departman, maas,
       AVG(maas)    OVER (PARTITION BY departman)                  AS dept_ort,
       ROW_NUMBER() OVER (PARTITION BY departman ORDER BY maas DESC) AS rn,
       RANK()       OVER (PARTITION BY departman ORDER BY maas DESC) AS rnk,
       DENSE_RANK() OVER (PARTITION BY departman ORDER BY maas DESC) AS drnk
FROM calisanlar;
  • PARTITION BY: pencereyi gruplara böler (opsiyonel).
  • ORDER BY: pencere içindeki sırayı belirler.

Sıralama fonksiyonları (maaşlar: 100, 100, 90)

maasROW_NUMBERRANKDENSE_RANK
100111
100211
90332
  • ROW_NUMBER: eşitlikte bile benzersiz numara verir.
  • RANK: eşitlere aynı sırayı verir, sonra boşluk bırakır.
  • DENSE_RANK: eşitlere aynı sırayı verir, boşluk bırakmaz.

Sık kullanılan diğerleri

  • LAG(col) / LEAD(col): önceki/sonraki satırın değeri (ör. günlük değişim).
  • SUM(col) OVER (ORDER BY tarih): kümülatif toplam (running total).

Klasik örnek: her departmanın en yüksek maaşlı 2 çalışanı

SELECT * FROM (
  SELECT *, DENSE_RANK() OVER (PARTITION BY departman ORDER BY maas DESC) AS r
  FROM calisanlar
) t
WHERE r <= 2;

Window function'lar WHERE içinde doğrudan kullanılamaz (WHERE'den sonra hesaplanırlar); bu yüzden alt sorgu veya CTE gerekir.

  1. INNER JOIN ile LEFT JOIN arasındaki fark nedir?KolayVeritabanı & SQLBackend
  2. Bir tablodaki ikinci en yüksek maaşı bulun.OrtaVeritabanı & SQLBackend
  3. Index nedir? Dezavantajları nelerdir?OrtaVeritabanı & SQLBackend
  4. ACID nedir?OrtaVeritabanı & SQLBackend
  5. Normalizasyon nedir? Ne zaman denormalizasyon yaparsınız?ZorVeritabanı & SQLBackend
  6. N+1 sorgu problemi nedir ve nasıl çözülür?OrtaVeritabanı & SQLBackend

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle