שיעורי מודול (2/4)
קיבוץ עם PARTITION BY
קיבוץ עם PARTITION BY
שימוש בחישובים גלובליים בכל שורה, אבל לעתים קרובות זה לא מספיק. ייתכן שנרצה לחשב את הממוצע לקטגוריה או ללקוח, תוך שמירה על הפרטים המקוריים בכל שורה.
כאן נכנס לתמונה PARTITION BY בתוך הסעיף OVER(...).
כיצד פועלת PARTITION BY
מבחינה קונספטואלית הוא מתנהג בדומה ל-GROUP BY, אך במקום לכווץ שורות בתוצאה, הוא רק מגדיר את הגבול של "חלון" הנתונים שעליו תפעל הפונקציה כדי לחשב את התוצאה עבור השורה הבודדת.
SELECT
product_name,
category_id,
price,
AVG(price) OVER(PARTITION BY category_id) AS cat_avg_price
FROM products;כל שורת מוצר שומרת על הפרטים שלה, והעמודה cat_avg_price תציג את הממוצע מוגבל למוצרים באותה קטגוריה.
מטבלת 'מוצרים', חלץ 'מזהה', 'מזהה_קטגוריה' ו'מחיר'. הוסף עמודה 'קטגוריה_כולל' המחשבת את הסכום של 'מחיר' עבור כל 'מזהה_קטגוריה' באמצעות פונקציות חלון.
הצג רמז
השתמש ב-SUM(price) OVER(PARTITION BY category_id).
הפתרון זמין לאחר 3 ניסיונות
מטבלת 'ביקורות', הצג את 'מזהה_מוצר', 'דירוג' ו-'avg_product_rating' (הדירוג הממוצע מחולק לפי מוצר). הצג את כל השורות.
הצג רמז
השתמש ב-AVG(rating) וב-PARTITION BY product_id. העבר אותו ל-NUMERIC במידת הצורך.
הפתרון זמין לאחר 3 ניסיונות