ใช้ CASE WHEN ภายใน SUM() เพื่อนับเงื่อนไขหลายอย่างพร้อมกัน
รูปแบบ SUM(CASE WHEN condition THEN 1 ELSE 0 END) ใช้ได้กับเงื่อนไขซับซ้อน ให้นับแถวที่ตรงเงื่อนไขแต่ละข้อใน Query เดียว
ตัวอย่างสร้างตารางและข้อมูล
CREATE TABLE DemoTable (Number INT); INSERT INTO DemoTable VALUES (10), (0), (20), (50), (0), (0), (40);
ข้อมูลในตาราง
+--------+ | Number | +--------+ | 10 | | 0 | | 20 | | 50 | | 0 | | 0 | | 40 | +--------+
คำสั่งนับ > 0 และ = 0 พร้อมกัน
SELECT
SUM(CASE WHEN Number > 0 THEN 1 ELSE 0 END) AS TotalGreaterThanZero,
SUM(CASE WHEN Number = 0 THEN 1 ELSE 0 END) AS TotalEqualToZero
FROM DemoTable
WHERE Number >= 0;
ผลลัพธ์
+--------------------------+--------------------+ | TotalGreaterThanZero | TotalEqualToZero | +--------------------------+--------------------+ | 4 | 3 | +--------------------------+--------------------+
คำอธิบาย:
CASE WHEN Number > 0 THEN 1 ELSE 0 ENDคืน 1 ถ้ามากกว่า 0, ไม่ใช่คืน 0SUM(...)รวมค่า 1/0 → ได้จำนวนแถวที่ตรงเงื่อนไข- ทำได้ใน Query เดียว (Single Pass) ไม่ต้อง Query หลายครั้ง
รูปแบบย่อ (MySQL เท่านั้น): SUM(Number > 0) เพราะ Boolean TRUE=1, FALSE=0
SELECT
SUM(Number > 0) AS GreaterThanZero,
SUM(Number = 0) AS EqualToZero,
SUM(Number < 0) AS LessThanZero
FROM DemoTable;
⚠ ข้อควรระวัง: รูปแบบ SUM(condition) เป็น MySQL-specific ไม่ใช่ Standard SQL ควรใช้ CASE WHEN หากต้องการ Portable