Để 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ố NULLSUM(Value=0): Tương tự, đếm số giá trị bằng 0COUNT(DISTINCT Value > 0):Value > 0trả về 1 (true) cho 10,20 và 0 (false) cho 0,NULL.DISTINCTtrê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)