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