دروس الوحدة (2/4)
التجميع باستخدام PARTITION BY
التجميع باستخدام PARTITION BY
إن إجراء حسابات شاملة في كل صف أمر مفيد، ولكنه في كثير من الأحيان لا يكون كافيا. قد نرغب في حساب المتوسط لكل فئة أو لكل عميل، مع الاحتفاظ بالتفاصيل الأصلية في كل صف.
هذا هو المكان الذي يأتي فيه PARTITION BY داخل جملة OVER(...).
كيف يعمل القسم 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 المتوسط المقتصر على المنتجات الموجودة في نفس الفئة.
من جدول "المنتجات"، استخرج "المعرف" و"معرف_الفئة" و"السعر". أضف عمود "category_total" لحساب مجموع "السعر" لكل "category_id" باستخدام وظائف النافذة.
إظهار التلميح
استخدم SUM(السعر) OVER(PARTITION BYcategor_id).
الحل متاح بعد 3 من المحاولات
من جدول "المراجعات"، اعرض "معرف_المنتج" و"التقييم" و"متوسط_تصنيف_المنتج" (متوسط التقييم مقسمًا حسب المنتج). إظهار كافة الصفوف.
إظهار التلميح
استخدم AVG(rated) وPARTITION BY Product_id. أرسلها إلى NUMERIC إذا لزم الأمر.
الحل متاح بعد 3 من المحاولات