Dùng tên cột trực tiếp trong điều kiện WHEN của CASE (searched CASE) để thống kê theo giá trị cột.
Dữ liệu: Bảng Students
mysql> SELECT * FROM Students; +----+-----------+-----------+----------+----------------+ | id | Name | Country | Language | Course | +----+-----------+-----------+----------+----------------+ | 1 | Francis | UK | English | Literature | | 2 | Rick | USA | English | History | | 3 | Correy | USA | English | Computers | | 4 | Shane | France | French | Computers | | 5 | Validimir | Russia | Russian | Computers | | 6 | Steve | Australia | English | Geoinformatics | | 7 | Rahul | India | Hindi | Yoga | | 8 | Harshit | India | Hindi | Computers | | 9 | Harry | NZ | English | Electronics | +----+-----------+-----------+----------+----------------+
Truy vấn: Đếm học sinh theo quốc gia
mysql> SELECT
SUM(CASE WHEN country = 'USA' THEN 1 ELSE 0 END) AS USA,
SUM(CASE WHEN country = 'UK' THEN 1 ELSE 0 END) AS UK,
SUM(CASE WHEN country = 'INDIA' THEN 1 ELSE 0 END) AS INDIA,
SUM(CASE WHEN country = 'Russia' THEN 1 ELSE 0 END) AS Russia,
SUM(CASE WHEN country = 'France' THEN 1 ELSE 0 END) AS France,
SUM(CASE WHEN country = 'NZ' THEN 1 ELSE 0 END) AS NZ,
SUM(CASE WHEN country = 'Australia' THEN 1 ELSE 0 END) AS Australia
FROM Students;
Kết quả
+------+------+-------+--------+--------+------+-----------+ | USA | UK | INDIA | Russia | France | NZ | Australia | +------+------+-------+--------+--------+------+-----------+ | 2 | 1 | 2 | 1 | 1 | 1 | 1 | +------+------+-------+--------+--------+------+-----------+
Mẫu chung: SUM(CASE WHEN col = 'value' THEN 1 ELSE 0 END) đếm số hàng có col = 'value'. Đây là kỹ thuật "pivot" / "crosstab" phổ biến.