บทนำ
การนับจำนวนคอลัมน์ที่มีค่า "มีความหมาย" (ไม่เป็น NULL และไม่เป็น 0) ในแต่ละแถว สามารถทำได้ด้วยฟังก์ชัน IF() รวมกัน
ตัวอย่างการสร้างตารางและเพิ่มข้อมูล
mysql> CREATE TABLE DemoTable (
-> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Number1 INT,
-> Number2 INT
-> );
Query OK, 0 rows affected (1.15 sec)
mysql> INSERT INTO DemoTable(Number1, Number2) VALUES(10, 20);
mysql> INSERT INTO DemoTable(Number1, Number2) VALUES(0, 32);
mysql> INSERT INTO DemoTable(Number1, Number2) VALUES(40, 0);
mysql> INSERT INTO DemoTable(Number1, Number2) VALUES(40, 50);
แสดงข้อมูลทั้งหมด
mysql> SELECT * FROM DemoTable;
ผลลัพธ์
+----+---------+---------+
| Id | Number1 | Number2 |
+----+---------+---------+
| 1 | 10 | 20 |
| 2 | 0 | 32 |
| 3 | 40 | 0 |
| 4 | 40 | 50 |
+----+---------+---------+
4 rows in set (0.00 sec)
คำสั่งนับคอลัมน์ที่ไม่เป็น 0 (Non-zero)
mysql> SELECT *,
-> IF(Number1 <> 0, 1, 0) + IF(Number2 <> 0, 1, 0) AS TotalCount
-> FROM DemoTable;
ผลลัพธ์
+----+---------+---------+------------+
| Id | Number1 | Number2 | TotalCount |
+----+---------+---------+------------+
| 1 | 10 | 20 | 2 |
| 2 | 0 | 32 | 1 |
| 3 | 40 | 0 | 1 |
| 4 | 40 | 50 | 2 |
+----+---------+---------+------------+
4 rows in set (0.00 sec)
คำอธิบาย
IF(condition, trueValue, falseValue)- ฟังก์ชันเงื่อนไข InlineNumber1 <> 0- ตรวจสอบว่าไม่เท่ากับ 0 (รวมตรวจสอบ NULL ด้วย เพราะ NULL <> 0 เป็น NULL/False)- ผลลัพธ์แต่ละ IF คือ 1 หรือ 0 → บวกกันได้จำนวนคอลัมน์ที่ "มีค่า"
ขยายสำหรับหลายคอลัมน์
SELECT *,
IF(Col1 <> 0, 1, 0) +
IF(Col2 <> 0, 1, 0) +
IF(Col3 <> 0, 1, 0) +
IF(Col4 <> 0, 1, 0) AS NonZeroCount
FROM DemoTable;
วิธีอื่น: ใช้ CASE WHEN
SELECT *,
CASE WHEN Number1 <> 0 THEN 1 ELSE 0 END +
CASE WHEN Number2 <> 0 THEN 1 ELSE 0 END AS TotalCount
FROM DemoTable;
กรณีต้องการนับ Non-NULL (รวม 0 ด้วย)
SELECT *,
(Number1 IS NOT NULL) + (Number2 IS NOT NULL) AS NonNullCount
FROM DemoTable;
ใน MySQL: IS NOT NULL คืนค่า 1 (True) หรือ 0 (False) → บวกกันได้เลย