Để tính tổng giá trị của một cột, gom nhóm theo giá trị của cột khác, dùng GROUP BY với SUM().
Ví dụ minh họa
Tạo bảng chi phí khách hàng:
CREATE TABLE sumOfFieldsDemo (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
ClientSerialNumber VARCHAR(100),
ClientCost INT
);
INSERT INTO sumOfFieldsDemo (ClientSerialNumber, ClientCost) VALUES
('1111', 450), ('2222', 550), ('3333', 150),
('3333', 250), ('2222', 1000), ('1111', 1000),
('1111', 500), ('4444', 100);
Dữ liệu (8 hàng):
+----+--------------------+------------+ | Id | ClientSerialNumber | ClientCost | +----+--------------------+------------+ | 1 | 1111 | 450 | | 2 | 2222 | 550 | | 3 | 3333 | 150 | | 4 | 3333 | 250 | | 5 | 2222 | 1000 | | 6 | 1111 | 1000 | | 7 | 1111 | 500 | | 8 | 4444 | 100 | +----+--------------------+------------+
Tính tổng chi phí theo mỗi Serial Number:
SELECT Id, ClientSerialNumber, SUM(ClientCost) AS TotalSum FROM sumOfFieldsDemo GROUP BY ClientSerialNumber;
Kết quả (4 nhóm):
+----+--------------------+----------+ | Id | ClientSerialNumber | TotalSum | +----+--------------------+----------+ | 1 | 1111 | 1950 | | 2 | 2222 | 1550 | | 3 | 3333 | 400 | | 8 | 4444 | 100 | +----+--------------------+----------+
Lưu ý:
- Cột
Idtrong kết quả là giá trị đầu tiên của nhóm (do MySQL cho phép chọn cột không gom nhóm và không tổng hợp - hành vi "non-deterministic" trừ khi bậtONLY_FULL_GROUP_BY). - Để an toàn, chỉ chọn cột gom nhóm và cột tổng hợp:
SELECT ClientSerialNumber, SUM(ClientCost) .... - Có thể thêm
HAVING SUM(ClientCost) > 1000để lọc nhóm có tổng lớn.