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

Tổng có điều kiện (SUM IF) trong MySQL

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.