Tính tổng theo điều kiện với SUM(IF())
Để tổng cột Amount chỉ cho các hàng thỏa mãn điều kiện (ví dụ: ModeOfPayment = 'Online'), dùng SUM(IF(dieu_kien, cot_gia_tri, 0)).
Cú pháp
SELECT SUM(IF(cot_dieu_kien = 'gia_tri', cot_tong, 0)) AS ten_alias
FROM tenBang;
Ví dụ minh họa
Tạo bảng SumWithIfCondition:
CREATE TABLE SumWithIfCondition (
ModeOfPayment VARCHAR(100),
Amount INT
);
Chèn dữ liệu:
INSERT INTO SumWithIfCondition VALUES
('Offline', 10), ('Online', 100),
('Offline', 20), ('Online', 200),
('Offline', 30), ('Online', 300);
Trường hợp 1: Tổng thanh toán Online
SELECT SUM(IF(ModeOfPayment = 'Online', Amount, 0)) AS TotalAmount
FROM SumWithIfCondition;
+-------------+
| TotalAmount |
+-------------+
| 600 |
+-------------+
Trường hợp 2: Tổng thanh toán Offline
SELECT SUM(IF(ModeOfPayment = 'Offline', Amount, 0)) AS TotalAmount
FROM SumWithIfCondition;
+-------------+
| TotalAmount |
+-------------+
| 60 |
+-------------+
Cách viết hiện đại: CASE WHEN
Tiêu chuẩn SQL khuyến nghị dùng CASE (hỗ trợ nhiều DB):
SELECT
SUM(CASE WHEN ModeOfPayment = 'Online' THEN Amount ELSE 0 END) AS OnlineTotal,
SUM(CASE WHEN ModeOfPayment = 'Offline' THEN Amount ELSE 0 END) AS OfflineTotal
FROM SumWithIfCondition;
Cả hai cách cho kết quả như nhau. CASE dễ đọc hơn khi có nhiều nhánh.