การนับเงื่อนไขหลายอย่างในคำสั่ง SELECT เดียวด้วย SUM()
เราสามารถนับจำนวนค่า NULL, ค่า 0 และจำนวนค่าที่ไม่ซ้ำกันที่มากกว่า 0 พร้อมกันในคำสั่งเดียวโดยใช้ SUM() กับเงื่อนไข boolean (true=1, false=0)
สร้างตารางและเพิ่มข้อมูล
mysql> CREATE TABLE DemoTable (Value INT);
Query OK, 0 rows affected (1.35 sec)
mysql> INSERT INTO DemoTable VALUES(10);
mysql> INSERT INTO DemoTable VALUES(NULL);
mysql> INSERT INTO DemoTable VALUES(10);
mysql> INSERT INTO DemoTable VALUES(0);
mysql> INSERT INTO DemoTable VALUES(20);
mysql> INSERT INTO DemoTable VALUES(10);
mysql> INSERT INTO DemoTable VALUES(0);
mysql> INSERT INTO DemoTable VALUES(NULL);
แสดงข้อมูลทั้งหมด
mysql> SELECT * FROM DemoTable;
ผลลัพธ์:
+-------+
| Value |
+-------+
| 10 |
| NULL |
| 10 |
| 0 |
| 20 |
| 10 |
| 0 |
| NULL |
+-------+
8 rows in set (0.00 sec)
คำสั่งนับ NULL, 0 และค่าที่ไม่ซ้ำกัน > 0
mysql> SELECT
SUM(Value IS NULL) AS NumberOfNull,
SUM(Value = 0) AS NumberOfZero,
COUNT(DISTINCT Value > 0) AS ValueExceptZeroAndNull
FROM DemoTable;
ผลลัพธ์:
+--------------+--------------+------------------------+
| NumberOfNull | NumberOfZero | ValueExceptZeroAndNull |
+--------------+--------------+------------------------+
| 2 | 2 | 2 |
+--------------+--------------+------------------------+
1 row in set (0.00 sec)
คำอธิบาย
SUM(Value IS NULL): นับแถวที่ Value เป็น NULL (TRUE=1, FALSE=0)SUM(Value = 0): นับแถวที่ Value เท่ากับ 0COUNT(DISTINCT Value > 0): นับค่าที่ไม่ซ้ำกันที่มากกว่า 0 (คือ 10 และ 20 → 2 ค่า)- เทคนิคใช้ boolean expression ใน aggregate function ทำให้ได้ผลลัพธ์หลายอย่างในคำสั่งเดียว