COUNT وSUM وAVG وMIN وMAX
استخدم دوال التجميع الأساسية الخمس، وافهم الفرق بين COUNT(*) وCOUNT(column)، واعرف كيفية تعامل كل منها مع NULL.
COUNT وSUM وAVG وMIN وMAX درس مجاني في SQL Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في SQL Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة SQL Academy 4 دروس في المجموع.
ما الذي تفعله الدوال التجميعية
تُحوّل الدالة التجميعية عدة صفوف إلى قيمة واحدة. ومن أمثلتها: إجمالي الإيرادات، ومتوسط التقييم، وأحدث تاريخ.
COUNT
يعدّ الصفوف. وله شكلان:
SELECT COUNT(*) FROM users; -- counts ALL rows
SELECT COUNT(email) FROM users; -- counts rows where email IS NOT NULL
SELECT COUNT(DISTINCT country) FROM users; -- distinct non-NULL countriesSUM
يجمع قيم عمود رقمي. ويتم تخطي قيم NULL:
SELECT SUM(total) FROM orders;
SELECT SUM(total) FROM orders WHERE user_id = 42;AVG
يحسب المتوسط الحسابي. ويتم تخطي قيم NULL، لذا تساوي AVG(x) قيمة SUM(x)/COUNT(x)، وليس SUM(x)/COUNT(*):
SELECT AVG(rating) FROM reviews;MIN وMAX
أصغر قيمة وأكبر قيمة غير NULL. ويعملان مع الأرقام والتواريخ والسلاسل النصية، أي مع كل ما يمكن مقارنته:
SELECT MIN(created_at), MAX(created_at) FROM orders;
SELECT MIN(name), MAX(name) FROM users; -- alphabeticالدوال التجميعية وNULL
تتجاهل جميع الدوال التجميعية، باستثناء COUNT(*)، مدخلات NULL. وتُرجع AVG وSUM وMIN وMAX القيمة NULL عند عدم وجود مدخلات غير NULL.
-- Suppose the table is empty or all rating is NULL:
SELECT AVG(rating) FROM reviews; -- NULLدمج الدوال التجميعية
يمكنكم استخدام عدة دوال تجميعية في استعلام واحد، إذ ترى جميعها المجموعة نفسها:
SELECT COUNT(*) AS orders,
SUM(total) AS revenue,
AVG(total) AS avg_order,
MIN(total) AS smallest,
MAX(total) AS biggest
FROM orders
WHERE created_at >= NOW() - INTERVAL '30 days';استخدام DISTINCT داخل الدوال التجميعية
طبّقوا DISTINCT قبل التجميع:
SELECT COUNT(DISTINCT user_id) AS unique_buyers,
SUM(DISTINCT total) AS sum_of_distinct_totals
FROM orders;الدوال التجميعية من دون GROUP BY
عند استخدام دالة تجميعية من دون GROUP BY، تكون مجموعة النتائج بأكملها مجموعة واحدة كبيرة، ولذلك تحصلون على صف واحد.
التصفية قبل التجميع
تضيّق WHERE نطاق صفوف الإدخال قبل تجميعها:
-- Average of only large orders:
SELECT AVG(total) FROM orders WHERE total > 100;عبارة FILTER (PostgreSQL)
أضيفوا مرشحات خاصة بكل دالة تجميعية باستخدام عبارة FILTER:
SELECT
COUNT(*) AS total_orders,
COUNT(*) FILTER (WHERE status = 'paid') AS paid_orders,
SUM(total) FILTER (WHERE status = 'paid') AS paid_revenue
FROM orders;مراجعة
الدوال التجميعية الأساسية الخمس هي: COUNT, SUM, AVG, MIN, MAX.
- يعدّ COUNT(*) الصفوف، بينما يتجاهل COUNT(col) قيم NULL
- تتجاهل الدوال التجميعية الأخرى مدخلات NULL
- ادمجوها مع WHERE / FILTER لإجراء تجميع شرطي
تحقق سريع
لنفترض أن rating تساوي NULL في 100 صف من أصل 500. على ماذا تقسم AVG(rating)؟
الأسئلة الشائعة
هل درس «COUNT وSUM وAVG وMIN وMAX» مجاني؟
نعم — نص درس «COUNT وSUM وAVG وMIN وMAX» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SQL Academy، انتقل إلى CoddyKit PRO. تتضمن دورة SQL Academy 4 دروس في المجموع.
ماذا ستتعلم في «COUNT وSUM وAVG وMIN وMAX»؟
استخدم دوال التجميع الأساسية الخمس، وافهم الفرق بين COUNT(*) وCOUNT(column)، واعرف كيفية تعامل كل منها مع NULL. تتمرن على SQL Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ SQL Academy؟
لا تُشترط خبرة سابقة. SQL Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «COUNT وSUM وAVG وMIN وMAX»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس SQL Academy هذا؟
نعم. كل درس في SQL Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- COUNT وSUM وAVG وMIN وMAX
- GROUP BY لعمود واحد أو عدة أعمدة
- HAVING مقابل WHERE
- أخطاء شائعة: قيم NULL في التجميعات