الفكرة ببساطة
WHERE تحدد الصفوف اللي تدخل التجميع. إذا تبي تعد التسجيلات المكتملة فقط، فلتر حالة التسجيل هنا.
HAVING تحدد المجموعات اللي تظهر بعد التجميع. إذا تبي المقررات اللي فيها تسجيلان مكتملان أو أكثر، حط شرط العدد هنا.
مثال محلول
المقرر A عنده تسجيلان مكتملان وثالث ملغى. المقرر B عنده تسجيل مكتمل واحد.
SELECT course_id, COUNT(*) AS total
FROM enrollments
WHERE status = 'completed'
GROUP BY course_id
HAVING COUNT(*) >= 2;يظهر A بعدد 2. التسجيل الملغى استبعد قبل العد، وB استبعد بعد التجميع.
انتبه لهالنقطة
حط شرط COUNT في HAVING. العد يصير بعد تحديد الصفوف بـ WHERE.
جرّب بنفسك
كيف تظهر كل المقررات اللي عندها تسجيل مكتمل واحد على الأقل؟
اعرض الإجابة
احذف HAVING. بعد WHERE ما تتكون مجموعة أصلا لمقرر ما عنده أي تسجيل مكتمل.