يسمح وضع CASE داخل SUM باختيار المبلغ الذي يساهم به كل صف في المجموع. إذا تحقق الشرط، يعيد التعبير المبلغ المطلوب، وإذا لم يتحقق يعيد صفرا. يفيد ذلك في إنتاج عدة مقاييس مختلفة داخل صف المجموعة نفسه، مثل إجمالي الطلبات المدفوعة وإجمالي الطلبات الملغاة لكل عميل.
مثال
SELECT customer_id,
SUM(CASE WHEN status = 'paid'
THEN amount ELSE 0 END) AS paid_total
FROM orders
GROUP BY customer_id;
يحتفظ هذا الاستعلام بطلبات العميل كلها أثناء تكوين المجموعة، لكنه يضيف مبالغ الطلبات المدفوعة فقط إلى العمود المحسوب. لذلك يمكن أن يظهر عميل لديه طلبات غير مدفوعة فقط، ويكون المجموع الشرطي له صفرا إذا كانت مجموعة صفوفه موجودة.
أما وضع الحالة في WHERE فيزيل الطلبات الأخرى قبل التجميع، وقد يزيل العميل من النتيجة تماما. يعتمد الاختيار على ما إذا كنت تريد إبقاء جميع العملاء الموجودين في جدول الطلبات ضمن التقرير.
باختصار: استخدم SUM(CASE ...) لجمع مبالغ تحقق شرطا مع إبقاء بقية صفوف المجموعة متاحة.
هل تريد تعلّم SQL خطوة بخطوة مع تمارين عملية؟ تابع مسار SQL من الأساسيات للاحتراف.