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

Kết hợp COUNT() và IF() trong một truy vấn MySQL duy nhất


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;