SUM مع CASE
جزء من قسم ما وراء الأساسيات في رحلة SQL على Coddy — الدرس 13 من 27.
تعمل نفس الفكرة مع SUM: وهي أكثر مرونة حتى. يمكن لـ CASE إرجاع 1 للصفوف المتطابقة و 0 لكل شيء آخر، أو يمكنها إرجاع أي قيمة عددية لوزن الصفوف بشكل مختلف.
SELECT
SUM(CASE WHEN status = 'active' THEN 1 ELSE 0 END) AS active_count,
SUM(CASE WHEN plan = 'pro' THEN amount ELSE 0 END) AS pro_revenue
FROM usersSUM(CASE … THEN 1 ELSE 0 END) و COUNT(CASE … THEN 1 END) يعطيان نفس النتيجة لعملية العد؛ اختر الأسلوب الذي يفضله فريقك.
التحدي
سهلالجداول والأعمدة المتاحة:
<strong>transactions</strong>:<strong>id</strong>,<strong>category</strong>,<strong>type</strong>,<strong>amount</strong>
type هو إما 'sale' أو 'refund'. لكل category قم بإرجاع:
categorynet_revenue: مجموع مبالغ البيع ناقص مجموع مبالغ الاسترداد
احسب net_revenue في تعبير SUM(CASE …) واحد حيث تساهم عمليات الاسترداد بمبالغها كعدد سالب. رتب حسب net_revenue تنازلياً.
ورقة مرجعية
استخدم SUM مع CASE لتجميع القيم بشكل مشروط — قم بإرجاع 1/0 للعد، أو القيم الفعلية للمجاميع المرجحة:
SELECT
SUM(CASE WHEN status = 'active' THEN 1 ELSE 0 END) AS active_count,
SUM(CASE WHEN plan = 'pro' THEN amount ELSE 0 END) AS pro_revenue
FROM usersSUM(CASE … THEN 1 ELSE 0 END) و COUNT(CASE … THEN 1 END) ينتجان نفس نتيجة العد.
جرّب بنفسك
SELECT category,
-- SUM(CASE ...) واحدة حيث تُحسب المبالغ المستردة كقيم سالبة
FROM transactions
GROUP BY category
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.