SUM() là hàm tổng hợp. Kết hợp với IF() để tính tổng có điều kiện. Ví dụ dùng Stored Procedure.
Tạo bảng SumWithIfCondition:
mysql> CREATE TABLE SumWithIfCondition (
-> ModeOfPayment VARCHAR(100),
-> Amount INT
-> );
Chèn dữ liệu (Online/Offline):
mysql> INSERT INTO SumWithIfCondition VALUES
('Offline', 10), ('Online', 100), ('Offline', 20),
('Online', 200), ('Offline', 30), ('Online', 300);
Dữ liệu:
mysql> SELECT * FROM SumWithIfCondition;
+---------------+--------+ | ModeOfPayment | Amount | +---------------+--------+ | Offline | 10 | | Online | 100 | | Offline | 20 | | Online | 200 | | Offline | 30 | | Online | 300 | +---------------+--------+
Tạo Stored Procedure nhận tham số phương thức thanh toán:
mysql> DELIMITER //
mysql> CREATE PROCEDURE sp_GetSumWithPaymentMode(IN PaymentMode VARCHAR(200))
-> BEGIN
-> SELECT PaymentMode, SUM(IF(ModeOfPayment = PaymentMode, Amount, 0)) AS TotalAmount
-> FROM SumWithIfCondition;
-> END //
mysql> DELIMITER ;
Gọi procedure:
Trường hợp 1: Online
mysql> CALL sp_GetSumWithPaymentMode('Online');
+-------------+-------------+ | PaymentMode | TotalAmount | +-------------+-------------+ | Online | 600 | +-------------+-------------+
Trường hợp 2: Offline
mysql> CALL sp_GetSumWithPaymentMode('Offline');
+-------------+-------------+ | PaymentMode | TotalAmount | +-------------+-------------+ | Offline | 60 | +-------------+-------------+
IF(ModeOfPayment = PaymentMode, Amount, 0) chỉ cộng Amount khi khớp điều kiện, ngược lại cộng 0.