الانتقال إلى المحتوى الرئيسي
الوحدة 13 · الدرس 2 من 450/57 في الدورة~15 min
دروس الوحدة (2/4)

التجميع باستخدام PARTITION BY

التجميع باستخدام PARTITION BY

إن إجراء حسابات شاملة في كل صف أمر مفيد، ولكنه في كثير من الأحيان لا يكون كافيا. قد نرغب في حساب المتوسط ​​لكل فئة أو لكل عميل، مع الاحتفاظ بالتفاصيل الأصلية في كل صف.

هذا هو المكان الذي يأتي فيه PARTITION BY داخل جملة OVER(...).

كيف يعمل القسم 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جارٍ التحميل…

من جدول "المنتجات"، استخرج "المعرف" و"معرف_الفئة" و"السعر". أضف عمود "category_total" لحساب مجموع "السعر" لكل "category_id" باستخدام وظائف النافذة.

جارٍ تحميل المحرر…
إظهار التلميح

استخدم SUM(السعر) OVER(PARTITION BYcategor_id).

الحل متاح بعد 3 من المحاولات

تمرين#sql.m13.l2.e2
المحاولات: 0جارٍ التحميل…

من جدول "المراجعات"، اعرض "معرف_المنتج" و"التقييم" و"متوسط_تصنيف_المنتج" (متوسط ​​التقييم مقسمًا حسب المنتج). إظهار كافة الصفوف.

جارٍ تحميل المحرر…
إظهار التلميح

استخدم AVG(rated) وPARTITION BY Product_id. أرسلها إلى NUMERIC إذا لزم الأمر.

الحل متاح بعد 3 من المحاولات