Khi dùng SUM() kết hợp với biểu thức logic, MySQL coi TRUE = 1 và FALSE = 0. Kỹ thuật này cho phép đếm điều kiện và hiển thị 0 cho giá trị không có trong dữ liệu — rất hữu ích cho báo cáo thống kê.
Cú pháp
SELECT
SUM(cot = 'gia_tri_1') AS TenDem_1,
SUM(cot = 'gia_tri_2') AS TenDem_2
FROM ten_bang;
Ví dụ minh họa
Bảng chỉ có trạng thái 'active':
CREATE TABLE DemoTable (Status VARCHAR(20));
INSERT INTO DemoTable VALUES ('active'), ('active'), ('active'), ('active');
Đếm cả 'active' và 'inactive' (dù 'inactive' không tồn tại):
SELECT
SUM(Status = 'active') AS CountOfActive,
SUM(Status = 'inactive') AS CountOfInactive
FROM DemoTable;
Kết quả
| CountOfActive | CountOfInactive |
|---|---|
| 4 | 0 |
Tại sao cách này hay?
- Một truy vấn duy nhất trả về nhiều cột đếm.
- Tự động hiển thị 0 cho giá trị vắng mặt — không cần LEFT JOIN bảng tham chiếu.
- Hiệu năng tốt: chỉ quét bảng một lần.
Mở rộng: Đếm nhiều trạng thái cùng lúc
SELECT
SUM(status = 'pending') AS pending,
SUM(status = 'approved') AS approved,
SUM(status = 'rejected') AS rejected,
SUM(status NOT IN ('pending','approved','rejected')) AS other
FROM orders;
Lưu ý: Biểu thức cot = 'gia_tri' trả về 1 (TRUE) hoặc 0 (FALSE). SUM() cộng dồn các giá trị này. Khác với COUNT(*) chỉ đếm số hàng, cách này đếm số hàng thỏa mãn điều kiện.