دوال التجميع
جزء من قسم الأساسيات في رحلة SQL على Coddy — الدرس 68 من 72.
تُستخدم دوال التجميع لحساب AVG() أو MAX() أو أي دالة تجميع أخرى حتى الصف الحالي.
على سبيل المثال، يمكننا حساب الحد الأقصى للإيرادات التي حصلنا عليها حتى نهاية كل فترة:
| الشهر | الإيرادات | المنطقة |
| 4 | 40 | الشرق |
| 5 | 20 | الشرق |
| 6 | 60 | الغرب |
| 7 | 55 | الغرب |
| 8 | 61 | الشرق |
SELECT month, revenue, MAX(revenue) OVER (ORDER BY month ASC) as max_revenue
from table1سيعيد هذا:
| الشهر | الإيرادات | أقصى_إيرادات |
| 4 | 40 | 40 |
| 5 | 20 | 40 |
| 6 | 60 | 60 |
| 7 | 55 | 60 |
| 8 | 61 | 61 |
بالنسبة للشهرين 4 و5، فإن الحد الأقصى للإيرادات هو 40، وبالنسبة للشهرين 6 و7 فهو 60، وبالنسبة للشهر 8 فهو 61. وذلك لأنه عندما يجد إيرادات جديدة أكبر، فإنه يتجاهل القيمة القديمة ويستخدم القيمة الأكبر حتى الآن.
بالنسبة لدالة AVG()، ستبدو هكذا:
SELECT month, revenue, AVG(revenue) OVER (ORDER BY month ASC) as avg_revenue
from table1| الشهر | الإيرادات | متوسط الإيرادات |
| 4 | 40 | 40 |
| 5 | 20 | 30 |
| 6 | 60 | 40 |
| 7 | 55 | 43.75 |
| 8 | 61 | 47.2 |
يمكننا أيضاً تجميع حساباتنا حسب فئات محددة باستخدام PARTITION BY. على سبيل المثال:
SELECT month, revenue, region,
MAX(revenue) OVER (PARTITION BY region ORDER BY month ASC) as max_revenue
FROM table1سيعطينا:
| الشهر | الإيرادات | المنطقة | أقصى_إيراد |
| 4 | 40 | الشرق | 40 |
| 5 | 20 | الشرق | 40 |
| 6 | 60 | الغرب | 60 |
| 7 | 55 | الغرب | 60 |
| 8 | 61 | الشرق | 61 |
الآن يتم حساب الحد الأقصى بشكل منفصل لكل منطقة. تحافظ المنطقة الشرقية والمنطقة الغربية على الحدود القصوى التراكمية الخاصة بهما بشكل مستقل.
التحدي
سهلالجداول والأعمدة المتاحة:
<strong>books</strong>:<strong>book</strong>,<strong>page</strong>,<strong>words</strong>
لكل كتاب، اعرض اسم الكتاب، وإجمالي صفحاته، وعدد الكلمات في كل صفحة، وقم بحساب:
- الحد الأقصى لعدد الكلمات الموجودة في أي صفحة في ذلك الكتاب
- متوسط عدد الكلمات لكل صفحة للكتاب بأكمله
- الفرق بين كلمات الصفحة الحالية ومتوسط كلمات الكتاب لكل صفحة
اعرض النتائج مرتبة حسب الكتاب ورقم الصفحة.
قم بإرجاع الأعمدة التالية:
bookpagewordsmax_words_in_bookavg_words_per_pagediff_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يقوم هذا بحساب الحد الأقصى بشكل منفصل لكل فئة، مع الحفاظ على حسابات تراكمية مستقلة.
جرّب بنفسك
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
2الشروط
أساسيات الشروطالكلمة المفتاحية ANDالكلمة المفتاحية ORالكلمة المفتاحية NOTدمج شروط متعددةالأقواسالقيم المنطقية Booleans3تنسيق محدد للنتائج
قيم Nullترتيب النتائج - الجزء الأولترتيب النتائج - الجزء الثانيمراجعة - شركة للأمن السيبرانيتحديد عدد السجلاتمراجعة - مصنع مركبات6تحديات تمهيدية
مراجعة - الانتخابات البرلمانيةمراجعة - اعتقال الشرطة للمجرمينمراجعة - حاوية مشروبات البارمراجعة - هندسة أعمدة جديدة9جداول متعددة
الربط الأساسي - الجزء الأولالربط الأساسي - الجزء الثانيمراجعة - الربط (Join)الربط الذاتي (Self Join)مراجعة - الربط الذاتي (Self Join)الاتحاد (Union)تبسيط الاستعلامات، الكلمة المفتاحية WITHمراجعة - استعلامات WITHمراجعة - مقاول العقارات12Window Functions الجزء الثاني
دوال RANK و DENSE_RANKمراجعة - RANK و DENSE_RANKدالة NTILEدوال التجميعمعيار ROWS و RANGE