דילוג לתוכן המרכזי
מודול 13 · שיעור 2 מתוך 450/57 בקורס~15 min
שיעורי מודול (2/4)

קיבוץ עם PARTITION BY

קיבוץ עם PARTITION BY

שימוש בחישובים גלובליים בכל שורה, אבל לעתים קרובות זה לא מספיק. ייתכן שנרצה לחשב את הממוצע לקטגוריה או ללקוח, תוך שמירה על הפרטים המקוריים בכל שורה.

כאן נכנס לתמונה PARTITION BY בתוך הסעיף OVER(...).

כיצד פועלת PARTITION BY

מבחינה קונספטואלית הוא מתנהג בדומה ל-GROUP BY, אך במקום לכווץ שורות בתוצאה, הוא רק מגדיר את הגבול של "חלון" הנתונים שעליו תפעל הפונקציה כדי לחשב את התוצאה עבור השורה הבודדת.

SQL
SELECT
  product_name,
  category_id,
  price,
  AVG(price) OVER(PARTITION BY category_id) AS cat_avg_price
FROM products;

כל שורת מוצר שומרת על הפרטים שלה, והעמודה cat_avg_price תציג את הממוצע מוגבל למוצרים באותה קטגוריה.

פעילות גופנית#sql.m13.l2.e1
ניסיונות: 0טוען...

מטבלת 'מוצרים', חלץ 'מזהה', 'מזהה_קטגוריה' ו'מחיר'. הוסף עמודה 'קטגוריה_כולל' המחשבת את הסכום של 'מחיר' עבור כל 'מזהה_קטגוריה' באמצעות פונקציות חלון.

טוען עורך...
הצג רמז

השתמש ב-SUM(price) OVER(PARTITION BY category_id).

הפתרון זמין לאחר 3 ניסיונות

פעילות גופנית#sql.m13.l2.e2
ניסיונות: 0טוען...

מטבלת 'ביקורות', הצג את 'מזהה_מוצר', 'דירוג' ו-'avg_product_rating' (הדירוג הממוצע מחולק לפי מוצר). הצג את כל השורות.

טוען עורך...
הצג רמז

השתמש ב-AVG(rating) וב-PARTITION BY product_id. העבר אותו ל-NUMERIC במידת הצורך.

הפתרון זמין לאחר 3 ניסיונות