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

Đếm nhiều cột cùng lúc trong MySQL với SUM() và IF()

Để đếm số lần xuất hiện của nhiều giá trị khác nhau trên nhiều cột trong một truy vấn đơn, bạn dùng SUM(IF(condition, 1, 0)) cho từng điều kiện.

Ví dụ minh họa

Tạo bảng:

mysql> create table DemoTable ( 
    FirstName varchar(100), 
    LastName varchar(100) 
);

Chèn dữ liệu:

mysql> insert into DemoTable values('Adam','Smith');
mysql> insert into DemoTable values('John','Smith');
mysql> insert into DemoTable values('John','Doe');
mysql> insert into DemoTable values('Bob','Doe');
mysql> insert into DemoTable values('Sam','Smith');

Hiển thị dữ liệu:

mysql> select * from DemoTable;

Kết quả:

+-----------+----------+
| FirstName | LastName |
+-----------+----------+
| Adam      | Smith    |
| John      | Smith    |
| John      | Doe      |
| Bob       | Doe      |
| Sam       | Smith    |
+-----------+----------+

Truy vấn COUNT nhiều điều kiện cùng lúc

mysql> select 
    sum(if(FirstName='John',1,0)) as John_Count, 
    sum(if(LastName='Smith',1,0)) as Smith_Count 
from DemoTable;

Kết quả:

+------------+-------------+
| John_Count | Smith_Count |
+------------+-------------+
| 2          | 3           |
+------------+-------------+

Giải thích:

  • IF(FirstName='John',1,0): Trả về 1 nếu tên là John, ngược lại 0
  • SUM(...): Cộng dồn → đếm số hàng thỏa mãn
  • John xuất hiện 2 lần (hàng 2,3) → John_Count = 2
  • Smith xuất hiện 3 lần (hàng 1,2,5) → Smith_Count = 3

Cách thay thế chuẩn SQL: SUM(CASE WHEN FirstName='John' THEN 1 ELSE 0 END) - tương thích nhiều DB hơn.

Mở rộng: Có thể thêm bao nhiêu cột COUNT tùy ý: SUM(IF(LastName='Doe',1,0)) as Doe_Count, v.v. Hiệu quả hơn chạy nhiều COUNT(*) riêng biệt.