Grouping with GROUP BY · التجميع باستخدام GROUP BY
Grouping rows with GROUP BY
An aggregate like AVG normally summarises the whole table into one number. GROUP BY splits the rows into groups that share a value, and gives one summary row per group:
This gives one row for each form, with that form's count and average.
تجميع الصفوف باستخدام GROUP BY
الدالة المجمعة مثل AVG تلخص عادةً الكامل الجدول إلى رقم واحد. GROUP BY يقسم الصفوف إلى مجموعات تشارك قيمة، ويعطي صف ملخص واحد لكل مجموعة:
SELECT form, COUNT(*) AS n, ROUND(AVG(score), 2) AS avg_score
FROM student
GROUP BY form;
هذا يعطي صفاً واحداً لكل form، مع عدد الطلاب والمتوسط الخاص بذلك الصف.
Filtering groups with HAVING
WHERE filters rows before grouping. To filter the groups themselves — using an aggregate — use HAVING:
This keeps only forms with 3 or more students. (WHERE cannot test COUNT(*); HAVING can.)
تصفية المجموعات باستخدام HAVING
WHERE يفلتر الصفوف قبل التجميع. لتصفير المجموعات نفسها — باستخدام دالة مجمعة — استخدم HAVING:
SELECT form, COUNT(*) AS n
FROM student
GROUP BY form
HAVING COUNT(*) >= 3;
هذا يحتفظ فقط بالصفوف التي تحتوي على 3 طلاب أو أكثر. (WHERE لا يمكنه اختبار COUNT(*)؛ HAVING يمكنه.)
Common mistakes
- Filter groups with
HAVING, rows withWHERE. - A plain column beside an aggregate must be in
GROUP BY.
أخطاء شائعة
- فلتر المجموعات باستخدام
HAVING، والصفوف باستخدامWHERE. - العمود العادي بجانب الدالة المجمعة يجب أن يكون في
GROUP BY.
For each form, show the form, the number of students as n, and the average score (2 d.p.) as avg_score. Group by form. · لكل form، اعرض النموذج، وعدد الطلاب كـ n، ومتوسط الدرجات (2 خانات عشرية) كـ avg_score. جمّع حسب form.
Click Run to see the output here. · اضغط تشغيل لرؤية المخرجات هنا.
Show each form and its student count n, but only for forms with 3 or more students. Use HAVING. · أظهر كل form وعدد طلابه n، ولكن فقط للأقسام التي تحتوي على 3 طلاب أو أكثر. استخدم HAVING.
Click Run to see the output here. · اضغط تشغيل لرؤية المخرجات هنا.