COUNT مع CASE
جزء من قسم ما وراء الأساسيات في رحلة SQL على Coddy — الدرس 12 من 27.
يمكنك وضع تعبير CASE داخل دالة تجميعية (aggregate). الحيلة هي أن COUNT يتجاهل NULL، لذا فإن CASE بدون ELSE يحسب فقط الصفوف التي تطابق الشرط.
SELECT
COUNT(*) AS total,
COUNT(CASE WHEN status = 'active' THEN 1 END) AS active_count
FROM usersالآن active_count هو عدد صفوف 'active' على الرغم من أننا لم نقم بتصفية الاستعلام بالكامل. هذه هي الحيلة وراء كل استعلام لوحة بيانات متعدد المقاييس ستكتبه على الإطلاق.
التحدي
سهلالجداول والأعمدة المتاحة:
<strong>orders</strong>:<strong>id</strong>,<strong>customer_id</strong>,<strong>status</strong>
لكل customer_id قم بإرجاع:
customer_idtotal: إجمالي الطلبات التي قام العميل بتقديمهاshipped: العدد حيثstatus = 'shipped'cancelled: العدد حيثstatus = 'cancelled'
قم بإرجاع العملاء الذين لديهم طلب واحد ملغى على الأقل فقط. رتب حسب customer_id.
ورقة مرجعية
استخدم CASE داخل COUNT لحساب الصفوف التي تطابق شرطاً معيناً دون تصفية الاستعلام بالكامل (تتجاهل COUNT القيمة NULL، لذا احذف عبارة ELSE):
SELECT
COUNT(*) AS total,
COUNT(CASE WHEN status = 'active' THEN 1 END) AS active_count
FROM usersجرّب بنفسك
SELECT customer_id,
COUNT(*) AS total,
-- shipped، cancelled باستخدام COUNT(CASE ...)
FROM orders
GROUP BY customer_id
-- تصفية للعملاء الذين لديهم إلغاء واحد على الأقل
ORDER BY customer_id
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.