شرح صفوف ومحتوى الفقرة
عند تجميع نتائج LEFT JOIN باستخدام GROUP BY، يقع كثير من المطورين في فخ استدعاء COUNT(*)؛ فبما أن السجل الأيسر غير المرتبط يظل ممثلاً بصف واحد في النتيجة (مع قيم NULL في اليمين)، فإن COUNT(*) يحسب ذلك الصف ويعطي 1 بدلاً من 0! التزم دائماً بالقاعدتين التاليتين:
- استخدم
COUNT(right_table.pk): مرّر عمود المفتاح الأساسي للجدول الأيمن (COUNT(o.order_id)) ليتجاهل قيمNULLويرجع0بدقة. - غلّف المجاميع بدالة
COALESCE: استخدمCOALESCE(SUM(o.total_amount), 0.00)لتحويل المجموع الفارغ إلى صفر رقمي نظيف.
SQL
-- Count right-table PK and coalesce NULL sums to zero
SELECT
u.user_id,
u.full_name,
COUNT(o.order_id) AS orders_count,
COALESCE(SUM(o.total_amount), 0.00) AS total_spent
FROM users AS u
LEFT JOIN orders AS o ON u.user_id = o.user_id
GROUP BY u.user_id, u.full_name;