Modül dersleri (2/4)
PARTITION BY ile gruplama
PARTITION BY ile gruplama
Her satırda genel hesaplamalar yapmak kullanışlıdır ancak çoğu zaman yeterli değildir. Her satırda orijinal ayrıntıyı korurken, ortalamayı kategori başına veya müşteri başına hesaplamak isteyebiliriz.
OVER(...) cümlesinin içindeki PARTITION BY burada devreye giriyor.
PARTITION BY nasıl çalışır?
Kavramsal olarak GROUP BY'ye benzer şekilde davranır, ancak sonuçtaki satırları daraltmak yerine, yalnızca işlevin tek satıra ilişkin sonucu hesaplamak için çalışacağı veri "penceresinin" sınırını tanımlar.
SELECT
product_name,
category_id,
price,
AVG(price) OVER(PARTITION BY category_id) AS cat_avg_price
FROM products;Her ürün satırı kendi ayrıntılarını tutar ve cat_avg_price sütunu, aynı kategorideki ürünlerle sınırlı olarak ortalamayı gösterir.
'Ürünler' tablosundan 'id', 'category_id' ve 'price' değerlerini çıkarın. Pencere işlevlerini kullanarak her bir 'kategori_kimliği' için 'fiyat'ın TOPLAMINI hesaplayan bir 'kategori_toplam' sütunu ekleyin.
İpucu göster
SUM(price) OVER(PARTITION BYcategory_id) seçeneğini kullanın.
3 denemeden sonra çözüm mevcut
'İncelemeler' tablosundan 'product_id', 'derecelendirme' ve 'avg_product_rating'i (ürüne göre bölümlendirilmiş ortalama derecelendirme) gösterin. Tüm satırları göster.
İpucu göster
AVG(derecelendirme) ve PARTITION BY ürün_kimliğini kullanın. Gerekirse NUMERIC'e aktarın.
3 denemeden sonra çözüm mevcut