0Pricing
SQL Academy · درس

عبارات الإطار: ROWS مقابل RANGE

اختر بين عبارات الإطار ROWS BETWEEN وRANGE BETWEEN، وافهم كيفية تعامل كل منهما مع التكرارات والفجوات

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

الإطار داخل OVER

تُقيّم دالة النافذة ضمن إطار، وهو مجموعة فرعية من الصفوف في التقسيم. ويُحدَّد الإطار بواسطة:

OVER (
  PARTITION BY ...
  ORDER BY ...
  ROWS BETWEEN <start> AND <end>     -- or RANGE BETWEEN ...
)

الإطار الافتراضي

إذا حددت ORDER BY من دون تحديد إطار، فسيكون الإعداد الافتراضي:

RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
-- "From the first row up to all rows tied with the current row".

تحسب ROWS الصفوف فعليًا

تحسب ROWS عدد N من الصفوف بترتيب التقسيم، بغض النظر عن القيمة:

SUM(x) OVER (ORDER BY day ROWS BETWEEN 2 PRECEDING AND CURRENT ROW)
-- The current row plus the previous 2.  Exactly 3 rows.

تحسب RANGE حسب القيمة

تحسب RANGE الصفوف التي تقع قيمة ORDER BY الخاصة بها ضمن نطاق قيمة الصف الحالي:

SUM(x) OVER (
  ORDER BY day
  RANGE BETWEEN INTERVAL '2 days' PRECEDING AND CURRENT ROW
)
-- All rows within 2 days (by calendar) of the current row.

أهمية الفرق

إذا كانت هناك فجوات في البيانات، فستعطي ROWS وRANGE إجابات مختلفة:

-- Days: 1, 3, 5 (no 2 or 4)
-- ROWS BETWEEN 2 PRECEDING AND CURRENT ROW for day 5: rows 1,3,5 = 3 days
-- RANGE BETWEEN INTERVAL '2 days' PRECEDING for day 5: only days 3,5 = 2 days

إطار GROUPS ‏(PG 11+)

تحسب GROUPS مجموعات الصفوف المتساوية، أي الصفوف المتساوية في ORDER BY، بدلًا من الصفوف الفردية:

SUM(x) OVER (
  ORDER BY tier
  GROUPS BETWEEN 1 PRECEDING AND CURRENT ROW
)
-- "The current tier and the previous tier" — useful when ORDER BY has many ties.

حدود الإطار

  • UNBOUNDED PRECEDING — الصف الأول في التقسيم
  • n PRECEDING
  • CURRENT ROW
  • n FOLLOWING
  • UNBOUNDED FOLLOWING — الصف الأخير

المجموع التراكمي

اجمع من البداية حتى الصف الحالي:

SUM(x) OVER (ORDER BY day ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
-- Same as the default frame.

النافذة المتراجعة

المتوسط المتراجع لـ N يومًا:

AVG(revenue) OVER (
  ORDER BY day
  ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
) AS avg_7d

النافذة المتمركزة

انظر في الاتجاهين:

AVG(revenue) OVER (
  ORDER BY day
  ROWS BETWEEN 3 PRECEDING AND 3 FOLLOWING
) AS centred_7d

مفاجأة LAST_VALUE

تعيد LAST_VALUE مع الإطار الافتراضي الصف الحالي، لا الصف الأخير في التقسيم. استخدم إطارًا صريحًا غير محدود:

LAST_VALUE(name) OVER (
  PARTITION BY group ORDER BY day
  ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
)

عبارة EXCLUDE ‏(PG 11+)

تخطَّ صفوفًا معينة من الإطار:

SUM(x) OVER (
  ORDER BY day
  ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
  EXCLUDE CURRENT ROW
)
-- All previous 6 days but not today.

خلاصة

تمنح عبارات الإطار تحكمًا دقيقًا في النوافذ.

  • ROWS — عدد الصفوف الفعلي
  • RANGE — نطاق قائم على القيمة
  • GROUPS — مجموعات الصفوف المتساوية
  • قد يفاجئك الإطار الافتراضي، لذا حدده صراحةً

تحقق سريع

لديك إيرادات يومية مع وجود أيام مفقودة. أي إطار يمنحك "كل الصفوف الواقعة ضمن الأيام التقويمية السبعة السابقة حتى الآن"؟

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

هل درس «عبارات الإطار: ROWS مقابل RANGE» مجاني؟

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

ماذا ستتعلم في «عبارات الإطار: ROWS مقابل RANGE»؟

اختر بين عبارات الإطار ROWS BETWEEN وRANGE BETWEEN، وافهم كيفية تعامل كل منهما مع التكرارات والفجوات تتمرن على SQL Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

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

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

كم من الوقت يستغرق درس «عبارات الإطار: ROWS مقابل RANGE»؟

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

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

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

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

  1. عبارات الإطار: ROWS مقابل RANGE
  2. Lag/Lead مع نوافذ الإطار
  3. التجميع باستخدام NTILE وCume_Dist
  4. أنماط إعداد التقارير الواقعية
← العودة إلى SQL Academy