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

นับจำนวนคอลัมน์ที่ไม่เป็น NULL และไม่เป็นศูนย์ใน MySQL ด้วย IF()

บทนำ

การนับจำนวนคอลัมน์ที่มีค่า "มีความหมาย" (ไม่เป็น 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) - ฟังก์ชันเงื่อนไข Inline
  • Number1 <> 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) → บวกกันได้เลย