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

المقدمة والجملة OVER

المقدمة والجملة الزائدة

لقد رأينا في الدروس السابقة كيفية استخدام GROUP BY لتجميع البيانات. ومع ذلك، فإن GROUP BY له قيود كبيرة: يؤدي إلى طي الصفوف. إذا قمت بالتجميع حسب المدينة، فستحصل على صف واحد لكل مدينة وستفقد تفاصيل العملاء الفرديين.

هذا هو المكان الذي تلعب فيه وظائف النافذة. فهي تتيح لك إجراء حسابات مجمعة (مثل المجاميع أو المتوسطات) مع الاحتفاظ بالصفوف الأصلية.

جملة OVER ().

الكلمة الرئيسية السحرية هي OVER(). تخبر قاعدة البيانات أن الوظيفة المجمعة (على سبيل المثال SUM، AVG، COUNT) يجب أن تعامل كدالة نافذة، يتم حسابها على مجموعة النتائج بأكملها ("النافذة" العامة) ولكن يتم تطبيقها وإرجاعها في كل صف واحد.

SQL
SELECT
  order_id,
  total_amount,
  AVG(total_amount) OVER() AS global_average
FROM orders;

في هذا المثال، نحتفظ بكل طلب فردي، ولكن يحتوي كل صف أيضًا على عمود محمي_INLINE_6 يتضمن متوسط ​​جميع الطلبات. من المفيد جدًا، على سبيل المثال، قياس مدى انحراف الطلب عن المتوسط!

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

حدد عمود "السعر" من جدول "المنتجات". أضف عمودًا يسمى "global_max_price" يحتوي على الحد الأقصى للسعر المحسوب باستخدام دالة النافذة على الجدول بأكمله.

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

استخدم MAX(price) مع OVER().

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

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

استخرج "المعرف" و"السعر" وأضف متوسط ​​السعر الإجمالي ("global_avg") من جدول "المنتجات".

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

فقط أضف AVG(price) OVER().

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