İleri sorgu teknikleri
Kümülatif toplam ve hareketli ortalama
Frame seçimi metriğin anlamını belirler.
Kavramı anlayalım
Kümülatif toplam geçmiş satırlardan mevcut satıra kadar birikimi gösterir. ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW, fiziksel sıra içindeki satırları açıkça tanımlar. Eşit sıralama değerlerinde RANGE aynı değere sahip satırları birlikte değerlendirebilir.
ROWS BETWEEN 2 PRECEDING AND CURRENT ROW üç satırlık hareketli penceredir; üç günlük pencere olmak zorunda değildir. Veri setinde bazı tarihler yoksa “son üç gün” için takvim tablosu ve gün seviyesinde hazırlık gerekir. Önce günlük grain’i kur, sonra pencereyi uygula.
Başlangıç günlerinde pencere tam dolu değildir; ortalama mevcut satır sayısından hesaplanır. Eksik günleri sıfır satış sayıp saymama kararını ölçünün iş tanımına bağla.
Biriken satış, son kayıtların ortalaması ve dönem karşılaştırmaları için.
Üç satırlık pencereyi veride tarih boşlukları varken üç gün diye adlandırmak.
Aynı konu. Üç farklı derinlik.
SELECT ProductId, Stock, SUM(Stock) OVER (ORDER BY ProductId ROWS UNBOUNDED PRECEDING) AS RunningStock FROM lab.Product ORDER BY ProductId;Ürün sırasına göre stok toplamını biriktirir.
Bu sayfa SQL çalıştırmaz. Örnekleri indirilebilir SqlStudioLab veritabanında, SSMS’de uygula. Geçici tablo örneklerini yeniden çalıştırırken yalnız ilgili #tabloyu temizle. VIEW, procedure ve function örnekleri lab’da kalıcı nesne oluşturur; üretim bağlantısı kullanma.
Önce kendin dene.
Maaşların çalışan kimliğine göre kümülatif toplamını getir.
Çözümü ve açıklamasını göster
SELECT EmployeeId, Salary, SUM(Salary) OVER (ORDER BY EmployeeId ROWS UNBOUNDED PRECEDING) AS RunningSalary FROM lab.Employee ORDER BY EmployeeId;Bu sıra yalnız öğretim içindir; gerçek maaş analizi için anlamlı iş sırasını ayrıca belirle.