Dùng hàm IF(condition, true_val, false_val) để chuyển mỗi cột thành 1 (khác 0) hoặc 0 (bằng 0), sau đó cộng dồn.
Ví dụ minh họa
Tạo bảng:
mysql> CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Number1 INT,
Number2 INT
);
Chèn dữ liệu:
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);
Xem dữ liệu:
mysql> SELECT * FROM DemoTable;
Kết quả
+----+---------+---------+ | Id | Number1 | Number2 | +----+---------+---------+ | 1 | 10 | 20 | | 2 | 0 | 32 | | 3 | 40 | 0 | | 4 | 40 | 50 | +----+---------+---------+
Đếm số cột khác 0 trên mỗi hàng:
mysql> SELECT *,
-> IF(Number1 <> 0, 1, 0) + IF(Number2 <> 0, 1, 0) AS TotalCount
-> FROM DemoTable;
Kết quả
+----+---------+---------+------------+ | Id | Number1 | Number2 | TotalCount | +----+---------+---------+------------+ | 1 | 10 | 20 | 2 | | 2 | 0 | 32 | 1 | | 3 | 40 | 0 | 1 | | 4 | 40 | 50 | 2 | +----+---------+---------+------------+
Mở rộng: Với nhiều cột, dùng SUM(IF(cot <> 0, 1, 0)) hoặc MySQL 8.0+ có thể dùng (cot1 <> 0) + (cot2 <> 0) + ... (boolean true=1, false=0).