انتقل إلى محتوى الدرس

Partitioning and Ordering Windows تقسيم النافذة بـ PARTITION BY

تعلّم دوال النوافذ التحليلية OVER و PARTITION BY والترتيب في MySQL بأسلوب MySQL 8 الحديث مع أمثلة استعلامات SQL وتطبيقات تفاعلية.
1 صفوف تعليمية
MySQL
7 مشاهدة

شرح صفوف ومحتوى الفقرة

الصف 1 شرح توضيحي

داخل قوسي جملة OVER (...)، يمكنك التحكم في تقسيم النافذة وترتيب صفوفها عبر عبارتين رئيسيتين:

  • التقسيم بـ PARTITION BY: يقسم الصفوف إلى مجموعات فرعية مستقلة (مثل كل قسم أو كل عميل على حدة) بحيث تبدأ حسابات النافذة من جديد عند حدود كل مجموعة دون دمج الصفوف.
  • الترتيب الداخلي بـ ORDER BY: يحدد تسلسل الصفوف داخل كل قسم؛ وعند إضافة ORDER BY داخل دالة مثل SUM(...) OVER (PARTITION BY ... ORDER BY ...) يتحول المجموع تلقائياً إلى مجموع تراكمي جاري (Running Total) من أول صف في القسم حتى الصف الحالي.
SQL
-- Compute per-customer running cumulative spend across order dates
SELECT
  user_id,
  order_id,
  order_date,
  total_amount,
  SUM(total_amount) OVER (
    PARTITION BY user_id
    ORDER BY order_date, order_id
  ) AS running_customer_spend
FROM orders;