Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Đếm số cột khác 0 (non-zero) trên mỗi hàng trong MySQL

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).