SQL Window Functions: ROW_NUMBER ve RANK ile Sıra Hesaplama

Window functions SQL'de sıralama ve gruplandırma işlemlerini çok daha etkili hale getiriyor. ROW_NUMBER, RANK ve DENSE_RANK fonksiyonları her satıra bir sıra numarası atayarak veri analizi kolaylaştırır.

Örneğin, satış ekibindeki her kişinin aylık performansını sıralamak veya bölüm içinde maaş sırasını belirlemek istediğinde window functions imdadına yetişir. Geleneksel GROUP BY ile yapamayacağınız işleri burada tek sorguyla halledebilirsiniz.

Basit bir örnek ile başlayalım. Çalışanları maaşa göre sıralamak ve her birine bir sıra numarası vermek istiyorsunuz:

1SELECT
2ad_soyad,
3departman,
4maas,
5ROW_NUMBER() OVER (ORDER BY maas DESC) AS sira
6FROM calisanlar;

Bu sorgu çıktı olarak her satırı 1'den başlayarak numaralandırır. Ancak aynı maaşa sahip iki kişi varsa, ROW_NUMBER onlara farklı numaralar verir (1, 2). Eğer eşit değerlere aynı sıra vermek istiyorsanız RANK kullanın:

1SELECT
2ad_soyad,
3departman,
4maas,
5RANK() OVER (ORDER BY maas DESC) AS sira
6FROM calisanlar;

RANK() ile aynı maaşa sahip iki kişi aynı sıra alır (örneğin her ikisi de 3. sıra), ama sonraki kişi 5. sıra olur. DENSE_RANK() ise boşluk bırakmaz, 3. sıradaki iki kişinin ardından 4. sıra gelir.

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası

Departman bazında sıralama yapmak istiyorsanız PARTITION BY ekleyin:

1SELECT
2ad_soyad,
3departman,
4maas,
5ROW_NUMBER() OVER (PARTITION BY departman ORDER BY maas DESC) AS dept_sirasi
6FROM calisanlar;

Bu sorgu her departman içinde ayrı ayrı sıralama yapar. İnsan Kaynakları departmanındaki en yüksek maaşlı kişi 1, Yazılım departmanındaki en yüksek maaşlı kişi de 1 olur.

Sık yapılan hata: PARTITION BY ve ORDER BY'ı karıştırmak. PARTITION BY gruplandırır, ORDER BY ise sıralamanın hangi kolona göre yapılacağını belirtir. İkisini de doğru yerde kullanmalısınız.

Window functions sayesinde subquery veya self-join ihtiyacı ortadan kalkıyor, sorgu daha okunabilir ve performanslı hale geliyor.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz