Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

دوال التجميع

جزء من قسم الأساسيات في رحلة SQL على Coddy — الدرس 68 من 72.

تُستخدم دوال التجميع لحساب AVG() أو MAX() أو أي دالة تجميع أخرى حتى الصف الحالي.
على سبيل المثال، يمكننا حساب الحد الأقصى للإيرادات التي حصلنا عليها حتى نهاية كل فترة:

الشهرالإيراداتالمنطقة
440الشرق
520الشرق
660الغرب
755الغرب
861الشرق
SELECT month, revenue, MAX(revenue) OVER (ORDER BY month ASC) as max_revenue
from table1

سيعيد هذا:

الشهرالإيراداتأقصى_إيرادات
44040
52040
66060
75560
86161

بالنسبة للشهرين 4 و5، فإن الحد الأقصى للإيرادات هو 40، وبالنسبة للشهرين 6 و7 فهو 60، وبالنسبة للشهر 8 فهو 61. وذلك لأنه عندما يجد إيرادات جديدة أكبر، فإنه يتجاهل القيمة القديمة ويستخدم القيمة الأكبر حتى الآن.

بالنسبة لدالة AVG()، ستبدو هكذا:

SELECT month, revenue, AVG(revenue) OVER (ORDER BY month ASC) as avg_revenue
from table1
الشهرالإيراداتمتوسط الإيرادات
44040
52030
66040
75543.75
86147.2

يمكننا أيضاً تجميع حساباتنا حسب فئات محددة باستخدام PARTITION BY. على سبيل المثال:

SELECT month, revenue, region,
MAX(revenue) OVER (PARTITION BY region ORDER BY month ASC) as max_revenue
FROM table1

سيعطينا:

الشهرالإيراداتالمنطقةأقصى_إيراد
440الشرق40
520الشرق40
660الغرب60
755الغرب60
861الشرق61

الآن يتم حساب الحد الأقصى بشكل منفصل لكل منطقة. تحافظ المنطقة الشرقية والمنطقة الغربية على الحدود القصوى التراكمية الخاصة بهما بشكل مستقل.

challenge icon

التحدي

سهل

الجداول والأعمدة المتاحة:

  • <strong>books</strong>: <strong>book</strong>, <strong>page</strong>, <strong>words</strong>

لكل كتاب، اعرض اسم الكتاب، وإجمالي صفحاته، وعدد الكلمات في كل صفحة، وقم بحساب:

  1. الحد الأقصى لعدد الكلمات الموجودة في أي صفحة في ذلك الكتاب
  2. متوسط عدد الكلمات لكل صفحة للكتاب بأكمله
  3. الفرق بين كلمات الصفحة الحالية ومتوسط كلمات الكتاب لكل صفحة

اعرض النتائج مرتبة حسب الكتاب ورقم الصفحة.

قم بإرجاع الأعمدة التالية:

  • book
  • page
  • words
  • max_words_in_book
  • avg_words_per_page
  • diff_from_avg

ورقة مرجعية

تقوم دوال النافذة (Window functions) مع التجميع بحساب القيم عبر مجموعة من الصفوف المتعلقة بالصف الحالي. استخدم جملة OVER مع ORDER BY لإجراء الحسابات التراكمية:

SELECT column, 
       MAX(column) OVER (ORDER BY column ASC) as running_max,
       AVG(column) OVER (ORDER BY column ASC) as running_avg
FROM table

استخدم PARTITION BY لتجميع الحسابات حسب الفئات:

SELECT column, category,
       MAX(column) OVER (PARTITION BY category ORDER BY column ASC) as max_per_category
FROM table

يقوم هذا بحساب الحد الأقصى بشكل منفصل لكل فئة، مع الحفاظ على حسابات تراكمية مستقلة.

جرّب بنفسك

quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس الأساسيات