Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

นับจำนวน 0, NULL และค่าที่ไม่ซ้ำกัน (ยกเว้น 0 และ NULL) ในคำสั่งเดียว MySQL

การนับเงื่อนไขหลายอย่างในคำสั่ง 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 เท่ากับ 0
  • COUNT(DISTINCT Value > 0) : นับค่าที่ไม่ซ้ำกันที่มากกว่า 0 (คือ 10 และ 20 → 2 ค่า)
  • เทคนิคใช้ boolean expression ใน aggregate function ทำให้ได้ผลลัพธ์หลายอย่างในคำสั่งเดียว