Sobes.tech
Middle

SQL'de pencere fonksiyonları ne için kullanılır?

sobes.tech yapay zeka

AI'dan gelen yanıt

SQL'deki pencere fonksiyonları, mevcut satırla ilişkili satır kümesinde verileri toplar, ancak sonuç kümesini gruplayamaz. Bu, kümülatif toplamlar, hareketli ortalamalar veya sıralama gibi hesaplamaların yapılmasına olanak tanır ve orijinal sorgunun tüm satırlarını korur.

Pencere fonksiyonlarının kullanımının temel amaçları:

  • Sıralama: Belirli bir pencerede her satıra bir sıra atanması.
    -- Her departman içindeki çalışanların maaşlarına göre sıralama
    SELECT
        employee_name,
        salary,
        department,
        RANK() OVER (PARTITION BY department ORDER BY salary DESC) as department_rank
    FROM
        employees;
    
  • Gruplama olmadan istatistiklerin hesaplanması: Satırların "pencere" içinde verilerin toplanması, detay seviyesinin satır seviyesinde korunması.
    -- Her satır için departman genelinde ortalama maaşı hesaplama
    SELECT
        employee_name,
        salary,
        department,
        AVG(salary) OVER (PARTITION BY department) as avg_department_salary
    FROM
        employees;
    
  • Mevcut satır ile diğer satırların karşılaştırılması: Pencere içindeki önceki veya sonraki satırlara erişim.
    -- Maaşına göre azalan sırayla departmandaki önceki çalışanın maaşını al
    SELECT
        employee_name,
        salary,
        department,
        LAG(salary, 1, 0) OVER (PARTITION BY department ORDER BY salary DESC) as previous_salary
    FROM
        employees;
    
  • Kümülatif toplam hesaplamaları: Toplamlar, ortalamalar ve diğer toplamlara artan toplamlar şeklinde hesaplamalar.
    -- Satışların tarihine göre kümülatif toplamını hesapla
    SELECT
        sale_date,
        amount,
        SUM(amount) OVER (ORDER BY sale_date) as cumulative_sales
    FROM
        sales;
    

Normal toplama fonksiyonlarından (GROUP BY) farklı olarak, pencere fonksiyonları satırları birleştirmez, bu da onları analitik sorgular ve detaylı veri analizi için güçlü bir araç haline getirir.