0Pricing
SQL Academy · درس

OVER وPARTITION BY وORDER BY

افهم نموذج دوال النوافذ: OVER وPARTITION BY للتجميع وORDER BY للترتيب، وكيف يختلف عن GROUP BY.

OVER وPARTITION BY وORDER BY درس مجاني في SQL Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في SQL Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة SQL Academy 4 دروس في المجموع.

ما هي دالة النافذة؟

تحسب دالة النافذة قيمة عبر مجموعة من الصفوف المرتبطة بالصف الحالي، من دون طيّ النتيجة كما يفعل GROUP BY. تحتفظ بكل صف، وتحصل أيضًا على عمود تجميعي.

مثال أساسي

إجمالي متوسط الطلبات عبر الجدول بأكمله، في كل صف:

SELECT id, total,
       AVG(total) OVER () AS avg_total
FROM orders;

عبارة OVER

تحدّد عبارة OVER (...) النافذة. وتعني الأقواس الفارغة «مجموعة النتائج بأكملها».

SELECT id, total,
       SUM(total) OVER () AS grand_total
FROM orders;

PARTITION BY: تجميع النافذة

تشبه GROUP BY، لكن الصفوف لا تُطوى:

SELECT id, user_id, total,
       SUM(total) OVER (PARTITION BY user_id) AS user_total
FROM orders;

-- Every order keeps its row; user_total is the same for all of one user's orders.

ORDER BY داخل النافذة

يحدّد ORDER BY داخل OVER ترتيب الصفوف للحسابات الجارية:

SELECT id, user_id, total,
       SUM(total) OVER (PARTITION BY user_id ORDER BY created_at) AS running_total
FROM orders;

-- Running total per user, ordered by date.

النافذة مقابل GROUP BY

مقارنة جنبًا إلى جنب:

-- GROUP BY: 1 row per user
SELECT user_id, SUM(total) FROM orders GROUP BY user_id;

-- Window: 1 row per order, with user total alongside
SELECT id, user_id, total,
       SUM(total) OVER (PARTITION BY user_id)
FROM orders;

إطار مختلف لكل صف

«الإطار» هو مجموعة الصفوف داخل التقسيم التي تنظر إليها الدالة. والإطار الافتراضي عند استخدام ORDER BY هو «من البداية حتى الصف الحالي» — وهذا ما يمنحك المجاميع الجارية.

النوافذ المُسمّاة

إذا اشتركت عدة دوال في نافذة واحدة، فسمِّها مرة واحدة:

SELECT id, user_id, total,
       SUM(total) OVER w AS running_sum,
       AVG(total) OVER w AS running_avg
FROM orders
WINDOW w AS (PARTITION BY user_id ORDER BY created_at);

تعمل معظم الدوال التجميعية كدوال نافذة

COUNT وSUM وAVG وMIN وMAX — يمكن استخدام جميعها على نافذة. وتضيف دوال النوافذ المتخصصة ROW_NUMBER وRANK وLAG/LEAD وNTILE وغير ذلك.

تعمل دوال النوافذ بعد WHERE

الترتيب المنطقي: FROM → WHERE → GROUP BY → HAVING → window functions → SELECT → ORDER BY → LIMIT. لذلك يُجري WHERE التصفية قبل حساب النوافذ.

اعتبارات الأداء

تتطلب دوال النوافذ فرزًا (أو تجزئة). وبالنسبة إلى التقسيمات الكبيرة، يتجنب الفهرس الموجود على أعمدة (التقسيم، الترتيب) خطوة الفرز.

مراجعة

تضيف دوال النوافذ قيمًا تجميعية لكل صف.

  • ‏OVER () = النتيجة بأكملها
  • ‏PARTITION BY = تجميع النافذة
  • ‏ORDER BY في النافذة = تفعيل الحسابات الجارية

تحقق سريع

ما الذي يحسبه SUM(x) OVER (PARTITION BY user_id)؟

الأسئلة الشائعة

هل درس «OVER وPARTITION BY وORDER BY» مجاني؟

نعم — نص درس «OVER وPARTITION BY وORDER BY» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SQL Academy، انتقل إلى CoddyKit PRO. تتضمن دورة SQL Academy 4 دروس في المجموع.

ماذا ستتعلم في «OVER وPARTITION BY وORDER BY»؟

افهم نموذج دوال النوافذ: OVER وPARTITION BY للتجميع وORDER BY للترتيب، وكيف يختلف عن GROUP BY. تتمرن على SQL Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ SQL Academy؟

لا تُشترط خبرة سابقة. SQL Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «OVER وPARTITION BY وORDER BY»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس SQL Academy هذا؟

نعم. كل درس في SQL Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. OVER وPARTITION BY وORDER BY
  2. ROW_NUMBER وRANK وDENSE_RANK
  3. LAG وLEAD وأنماط السلاسل الزمنية
  4. المجاميع التراكمية والمتوسطات المتحركة
← العودة إلى SQL Academy