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

Đếm số lượng 0 và 1 trong cột MySQL, hiển thị thành 2 cột riêng biệt


Giới thiệu

Dùng hàm tổng hợp SUM() kết hợp biểu thức boolean (TRUE=1, FALSE=0) để đếm số lượng 0 và 1 trong một cột tinyint/boolean, hiển thị kết quả trong 2 cột riêng.

Ví dụ minh họa

Tạo bảng và chèn dữ liệu

mysql> CREATE TABLE DemoTable (
    isMarried TINYINT(1)
);
mysql> INSERT INTO DemoTable VALUES 
(0), (1), (1), (0), (1), (1), (0);

Xem dữ liệu

mysql> SELECT * FROM DemoTable;
+-----------+
| isMarried |
+-----------+
| 0         |
| 1         |
| 1         |
| 0         |
| 1         |
| 1         |
| 0         |
+-----------+

Truy vấn đếm 0 và 1 thành 2 cột

mysql> SELECT 
    SUM(tbl.isMarried = 1) AS all_one_count,
    SUM(tbl.isMarried = 0) AS all_zero_count,
    SUM(tbl.isMarried IN (0,1)) AS all_zero_count_and_one_count
FROM DemoTable tbl;

Kết quả

+---------------+----------------+------------------------------+
| all_one_count | all_zero_count | all_zero_count_and_one_count |
+---------------+----------------+------------------------------+
| 4             | 3              | 7                            |
+---------------+----------------+------------------------------+

Giải thích

  • isMarried = 1 trả về 1 (TRUE) hoặc 0 (FALSE).
  • SUM() cộng dồn các giá trị 1/0 → đếm số lần TRUE.
  • IN (0,1) kiểm tra giá trị hợp lệ (loại NULL nếu có).

Cách thay thế: COUNT(IF())

SELECT 
    COUNT(IF(isMarried = 1, 1, NULL)) AS ones,
    COUNT(IF(isMarried = 0, 1, NULL)) AS zeros
FROM DemoTable;

Mở rộng: Pivot table (crosstab) cho nhiều giá trị

SELECT 
    SUM(status = 'pending') AS pending,
    SUM(status = 'approved') AS approved,
    SUM(status = 'rejected') AS rejected
FROM orders;