Để đế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 0SUM(...): 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.