الفكرة ببساطة
ابدأ بتحديد الجدول اللي لازم تحتفظ بكل صفوفه. هنا جدول الطلاب، لذلك مكانه على يسار LEFT JOIN.
إذا ما فيه تسجيل مطابق لطالب، تبقى بيانات الطالب، وأعمدة التسجيل في الناتج تأخذ القيمة NULL.
مثال محلول
عندك Students فيه سارة ومازن، وEnrollments فيه تسجيلان لسارة فقط. نبي عدد التسجيلات لكل طالب.
SELECT s.name, COUNT(e.id) AS registrations
FROM students AS s
LEFT JOIN enrollments AS e ON e.student_id = s.id
GROUP BY s.id, s.name;سارة تظهر بعدد 2، ومازن يظهر بعدد 0. COUNT(e.id) يتجاوز القيمة NULL في صف مازن.
انتبه لهالنقطة
COUNT(*) يحسب صف مازن لأنه موجود بعد الربط، حتى لو أعمدة التسجيل فيه فارغة. في هذا المثال يعطيه 1.
جرّب بنفسك
كيف تعدل الاستعلام عشان يعرض الطلاب اللي عندهم صفر تسجيلات فقط؟
اعرض الإجابة
أضف HAVING COUNT(e.id) = 0 بعد GROUP BY. الشرط هنا على نتيجة التجميع.