Giới thiệu
MySQL cho phép lồng hàm IF() bên trong COUNT() để đếm có điều kiện trong một truy vấn duy nhất, tránh phải chạy nhiều câu lệnh riêng biệt.
Cú pháp
SELECT COUNT(IF(condition, 1, NULL)) AS alias FROM table_name;
IF(condition, 1, NULL): Trả về 1 nếu điều kiện đúng, NULL nếu sai.COUNT()chỉ đếm các giá trị không phải NULL.
Ví dụ minh họa
Tạo bảng và chèn dữ liệu boolean
mysql> CREATE TABLE DemoTable (
isValidUser BOOLEAN
);
mysql> INSERT INTO DemoTable VALUES (TRUE), (FALSE), (FALSE), (TRUE), (TRUE), (TRUE), (FALSE);
Xem dữ liệu (1 = TRUE, 0 = FALSE)
mysql> SELECT * FROM DemoTable;
+-------------+ | isValidUser | +-------------+ | 1 | | 0 | | 0 | | 1 | | 1 | | 1 | | 0 | +-------------+
Truy vấn đếm số TRUE
mysql> SELECT COUNT(IF(isValidUser = 1, 1, NULL)) AS TOTAL_NUMBER_OF_ONE FROM DemoTable;
Kết quả
+---------------------+ | TOTAL_NUMBER_OF_ONE | +---------------------+ | 4 | +---------------------+
Cách viết hiện đại hơn: SUM() với biểu thức boolean
Trong MySQL, biểu thức boolean TRUE = 1, FALSE = 0. Có thể dùng SUM() trực tiếp:
SELECT SUM(isValidUser = 1) AS total_true FROM DemoTable;
Cách này ngắn gọn, dễ đọc và hiệu năng tương đương.
Mở rộng: Đếm nhiều điều kiện cùng lúc
SELECT
SUM(isValidUser = 1) AS total_true,
SUM(isValidUser = 0) AS total_false,
COUNT(*) AS total_rows
FROM DemoTable;