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

Đếm số lượng 0, NULL và giá trị distinct khác 0/NULL trong một truy vấn MySQL

Để thống kê đồng thời: số lượng NULL, số lượng 0, và số lượng giá trị distinct > 0 trong một truy vấn đơn, bạn có thể sử dụng các biểu thức điều kiện trong hàm SUM().

Ví dụ minh họa

Tạo bảng:

mysql> create table DemoTable( 
    Value int 
);

Chèn dữ liệu có 0, NULL, trùng lặp:

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

Hiển thị dữ liệu:

mysql> select * from DemoTable;

Kết quả:

+-------+
| Value |
+-------+
| 10    |
| NULL  |
| 10    |
| 0     |
| 20    |
| 10    |
| 0     |
| NULL  |
+-------+

Truy vấn thống kê 3 chỉ số cùng lúc

mysql> select 
    sum(Value is null) as NumberOfNull, 
    sum(Value=0) as NumberOfZero, 
    count(distinct Value > 0) as ValueExceptZeroAndNull 
from DemoTable;

Kết quả:

+--------------+--------------+------------------------+
| NumberOfNull | NumberOfZero | ValueExceptZeroAndNull |
+--------------+--------------+------------------------+
| 2            | 2            | 2                      |
+--------------+--------------+------------------------+

Giải thích:

  • SUM(Value IS NULL): Trong MySQL, biểu thức logic TRUE = 1, FALSE = 0. Cộng dồn cho số NULL
  • SUM(Value=0): Tương tự, đếm số giá trị bằng 0
  • COUNT(DISTINCT Value > 0): Value > 0 trả về 1 (true) cho 10,20 và 0 (false) cho 0,NULL. DISTINCT trên kết quả boolean → chỉ có 2 giá trị distinct: 0 và 1. Lưu ý: Cách này đếm số nhóm boolean chứ KHÔNG phải đếm distinct các giá trị > 0. Để đếm đúng distinct giá trị > 0: COUNT(DISTINCT CASE WHEN Value > 0 THEN Value END)