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

Đếm theo điều kiện và hiển thị kết quả ở các cột riêng biệt trong MySQL

Sử dụng SUM(CASE WHEN ... THEN 1 ELSE 0 END) (conditional aggregation) để đếm theo nhiều điều kiện, mỗi điều kiện một cột.

Ví dụ minh họa

Tạo bảng:

mysql> CREATE TABLE DemoTable1485 (
    StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    StudentName VARCHAR(20), StudentSubject VARCHAR(20)
);

Chèn dữ liệu (Chris học MySQL, Java; Robert học MongoDB 2 lần):

mysql> INSERT INTO DemoTable1485(StudentName, StudentSubject) VALUES('Chris', 'MySQL'), ('Robert', 'MongoDB'), ('Robert', 'MongoDB'), ('Chris', 'Java');

Xem dữ liệu:

mysql> SELECT * FROM DemoTable1485;
+-----------+-------------+----------------+
| StudentId | StudentName | StudentSubject |
+-----------+-------------+----------------+
| 1         | Chris       | MySQL          |
| 2         | Robert      | MongoDB        |
| 3         | Robert      | MongoDB        |
| 4         | Chris       | Java           |
+-----------+-------------+----------------+

Đếm số môn học của mỗi sinh viên theo từng môn (pivot/crosstab):

mysql> SELECT StudentSubject,
    SUM(CASE WHEN StudentName = 'Chris' THEN 1 ELSE 0 END) AS Chris_Count,
    SUM(CASE WHEN StudentName = 'Robert' THEN 1 ELSE 0 END) AS Robert_Count
    FROM DemoTable1485
    GROUP BY StudentSubject;

Kết quả:

+----------------+-------------+--------------+
| StudentSubject | Chris_Count | Robert_Count |
+----------------+-------------+--------------+
| MySQL          | 1           | 0            |
| MongoDB        | 0           | 2            |
| Java           | 1           | 0            |
+----------------+-------------+--------------+

Mở rộng: MySQL 8.0 hỗ trợ COUNT(*) FILTER (WHERE ...) (chuẩn SQL) nhưng MySQL chưa hỗ trợ. Dùng SUM(...) như trên là cách chuẩn.