Để tính tổng (SUM) cho nhiều nhóm giá trị khác nhau và hiển thị mỗi tổng trên một cột riêng, dùng CASE WHEN bên trong SUM().
Cú pháp
SELECT
SUM(CASE WHEN cot_dieu_kien = 'gia_tri_1' THEN cot_tinh_tong END) AS ten_cot_1,
SUM(CASE WHEN cot_dieu_kien = 'gia_tri_2' THEN cot_tinh_tong END) AS ten_cot_2,
SUM(CASE WHEN cot_dieu_kien = 'gia_tri_3' THEN cot_tinh_tong END) AS ten_cot_3
FROM ten_bang;
Ví dụ minh họa
Tạo bảng điểm người chơi:
mysql> CREATE TABLE DiemNguoiChoi (
-> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> TenNguoiChoi VARCHAR(20),
-> Diem INT
-> );
Chèn dữ liệu (Maxwell 3 lần, Ricky 3 lần, David 2 lần):
mysql> INSERT INTO DiemNguoiChoi(TenNguoiChoi, Diem) VALUES
-> ('Maxwell', 89), ('Ricky', 98), ('Maxwell', 96), ('Ricky', 78),
-> ('Maxwell', 51), ('Ricky', 89), ('David', 56), ('David', 65);
Truy vấn: Tổng điểm riêng cho từng người
mysql> SELECT
-> SUM(CASE WHEN TenNguoiChoi = 'Maxwell' THEN Diem END) AS 'MAXWELL TONG DIEM',
-> SUM(CASE WHEN TenNguoiChoi = 'Ricky' THEN Diem END) AS 'RICKY TONG DIEM',
-> SUM(CASE WHEN TenNguoiChoi = 'David' THEN Diem END) AS 'DAVID TONG DIEM'
-> FROM DiemNguoiChoi;
Kết quả (mỗi người một cột):
+---------------------+-------------------+-------------------+ | MAXWELL TONG DIEM | RICKY TONG DIEM | DAVID TONG DIEM | +---------------------+-------------------+-------------------+ | 236 | 265 | 121 | +---------------------+-------------------+-------------------+
Giải thích: CASE WHEN ... THEN Diem END trả về Diem nếu khớp điều kiện, ngược lại trả NULL. SUM() bỏ qua NULL nên chỉ cộng các giá trị thỏa mãn.
Ứng dụng: Báo cáo crosstab/pivot table, so sánh doanh thu theo khu vực, tháng, danh mục...