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

Sử dụng dữ liệu cột trong CASE statement MySQL

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.