İleri sorgu teknikleri
Window functions, OVER ve PARTITION BY
Satırları kaybetmeden grup bilgisi ekle.
Kavramı anlayalım
GROUP BY satırları özetler; window fonksiyonları detay satırlarını koruyarak ilgili pencere üzerinde hesap yapar. OVER, partition, sıralama ve gerektiğinde frame tanımlar. PARTITION BY hesaplamayı her anahtar grubu için yeniden başlatır.
Window ORDER BY ile sorgunun en son ORDER BY’ı farklı görevlerdedir: biri hesaplama sırasını, diğeri görüntü sırasını belirler. Window ifadeleri WHERE’de doğrudan filtrelenemez; CTE veya alt sorgu katmanı gerekir. Frame varsayımlarını özellikle toplam ve FIRST/LAST_VALUE işlemlerinde açık kur.
Pencere ifadesi çıktı sütunu olarak hesaplanır; orijinal satırları JOIN gibi çoğaltmaz. Sıralama eşitliklerini benzersiz anahtarla çözmek ROW_NUMBER için yararlı olsa da rank eşitliklerinin anlamını değiştirebilir.
Kategori ortalamasını ürün satırında veya müşteri toplamını sipariş satırında göstermek için.
Window ORDER BY’ın tüm sonucu görüntü sırasına soktuğunu sanmak.
Aynı konu. Üç farklı derinlik.
SELECT ProductName, Price, AVG(Price) OVER () AS OverallAverage FROM lab.Product;Yedi ürün satırı korunur ve her birinde genel ortalama bulunur.
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.
Her ürün satırına kategori ürün sayısını ekle.
Çözümü ve açıklamasını göster
SELECT ProductName, Category, COUNT(*) OVER (PARTITION BY Category) AS CategoryCount FROM lab.Product;Electronics satırlarının her birinde 5 görünür; satırlar gruplanıp kaybolmaz.