Skip to content

SQL Pencere Fonksiyonları açıklaması

Sık kullanılan her SQL pencere fonksiyonu ve bunları yöneten yan tümceler, işe göre gruplanmış: satırları sıralamak, komşulara bakmak, bir çerçeve üzerinde toplam çalıştırmak ve ilk ya da son değerleri almak. Her satır, fonksiyonu tek satırlık bir örnekle eşleştirir.

Bir pencere fonksiyonu, mevcut satırla ilişkili satırlar üzerinden bir sonuç hesaplar; ama GROUP BY gibi satırları tek satıra indirgemez. Her pencere fonksiyonu, pencereyi tanımlayan bir OVER yan tümcesiyle biter: PARTITION BY satırları gruplar, ORDER BY sıralar ve isteğe bağlı çerçeve kayan kümeyi sınırlar. OVER'ı öğrenin; gerisi kelime bilgisidir.

Referans tablosu · 27 kayıt
27 of 27 rows
Sıralama
Pencere içinde her satır için benzersiz, ardışık bir tamsayı.ROW_NUMBER() OVER (ORDER BY total DESC)
Boşluklu sıra; eşitler aynı sırayı paylaşır ve sonraki numaralar atlanır.RANK() OVER (ORDER BY total DESC)
Boşluksuz sıra; eşitler aynı sırayı paylaşır ve hiçbir numara atlanmaz.DENSE_RANK() OVER (ORDER BY total DESC)
Sıralı pencereyi n kabaca eşit kovaya böler.NTILE(4) OVER (ORDER BY total DESC)
Komşulara bakmak
n satır gerideki değer; böyle bir satır yoksa yerine varsayılan konur.LAG(total, 1, 0) OVER (ORDER BY created_at)
n satır ilerideki değer; böyle bir satır yoksa yerine varsayılan konur.LEAD(total, 1, 0) OVER (ORDER BY created_at)
Pencere üzerinde toplama
Satırları indirgemeden birikimli veya bölüm başına toplam.SUM(total) OVER (ORDER BY created_at)
Birikimli veya bölüm başına ortalama.AVG(total) OVER (PARTITION BY user_id)
Birikimli veya bölüm başına satır sayısı.COUNT(*) OVER (PARTITION BY user_id)
Pencere veya bölüm genelindeki en düşük değer.MIN(total) OVER (PARTITION BY user_id)
Pencere veya bölüm genelindeki en yüksek değer.MAX(total) OVER (PARTITION BY user_id)
ORDER BY ile ve başlangıca açık bir çerçeveyle SUM; her satır, kendisine kadarki her şeyi toplar.SUM(total) OVER (ORDER BY created_at ROWS UNBOUNDED PRECEDING)
Mevcut satırdan önce ve sonra n satırlık bir çerçeve üzerinden AVG.AVG(total) OVER (ORDER BY created_at ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING)
İlk, son ve yüzdelikler
Pencerenin sıralamasındaki ilk değer.FIRST_VALUE(total) OVER (ORDER BY total DESC)
Çerçevedeki son değer; UNBOUNDED FOLLOWING olmadan çerçeve mevcut satırda durur.LAST_VALUE(total) OVER (ORDER BY total ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
Pencerenin sıralamasında n. satırdaki değer.NTH_VALUE(total, 2) OVER (ORDER BY total DESC)
Bir satırın göreli sırası, 0 ile 1 arasında.PERCENT_RANK() OVER (ORDER BY total)
Mevcut satırda ya da ondan önceki satırların oranı, 1/n'den 1'e kadar.CUME_DIST() OVER (ORDER BY total)
OVER yan tümcesi
Her fonksiyonun okuduğu pencereyi tanımlar.<fn>() OVER (PARTITION BY user_id ORDER BY created_at)
Her satır grubu için pencereyi yeniden başlatır.PARTITION BY user_id
Her bölüm içindeki satırları sıralar.ORDER BY created_at
Kayan çerçeveyi sınırlar, örn. önceki satırlardan sonraki satırlara.ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
Çerçeveyi satır konumlarıyla değil değerlerle sınırlar; CURRENT ROW eşit satırları kapsar ve ORDER BY varken varsayılan çerçeve budur.RANGE BETWEEN 100 PRECEDING AND CURRENT ROW
Çerçeveyi ORDER BY'daki eşit satır gruplarıyla sınırlar.GROUPS BETWEEN 1 PRECEDING AND CURRENT ROW
Mevcut satırı çerçeveden çıkarır; EXCLUDE TIES ise onun eşitlerini çıkarır.ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING EXCLUDE CURRENT ROW
Bir pencereyi sorgu başına bir kez adlandırır ki birkaç OVER yan tümcesi onu yeniden kullanabilsin.WINDOW w AS (PARTITION BY user_id ORDER BY created_at)
Bir pencere agregasının okuduğu satırları, pencere uygulanmadan önce daraltır.SUM(total) FILTER (WHERE status = 'paid') OVER (ORDER BY created_at)