Để tính tổng (SUM) các giá trị trong khoảng thời gian xác định, MySQL sử dụng mệnh đề WHERE với toán tử BETWEEN trên cột ngày tháng, sau đó áp dụng hàm tập hợp SUM().
Ví dụ minh họa
Tạo bảng mua hàng:
mysql> CREATE TABLE DemoTable1444 (
Value INT,
PurchaseDate DATETIME
);
Chèn dữ liệu:
mysql> INSERT INTO DemoTable1444 VALUES (40, '2019-01-10'); mysql> INSERT INTO DemoTable1444 VALUES (100, '2019-10-03'); mysql> INSERT INTO DemoTable1444 VALUES (170, '2019-11-21'); mysql> INSERT INTO DemoTable1444 VALUES (70, '2018-12-05');
Dữ liệu:
mysql> SELECT * FROM DemoTable1444;
+-------+---------------------+ | Value | PurchaseDate | +-------+---------------------+ | 40 | 2019-01-10 00:00:00 | | 100 | 2019-10-03 00:00:00 | | 170 | 2019-11-21 00:00:00 | | 70 | 2018-12-05 00:00:00 | +-------+---------------------+
Tính tổng từ 2019-10-02 đến 2019-12-31
mysql> SELECT SUM(Value)
FROM DemoTable1444
WHERE PurchaseDate BETWEEN '2019-10-02' AND '2019-12-31';
Kết quả (100 + 170 = 270):
+------------+ | sum(Value) | +------------+ | 270 | +------------+
Lưu ý quan trọng về BETWEEN với DATETIME
BETWEEN '2019-10-02' AND '2019-12-31'tương đươngPurchaseDate >= '2019-10-02 00:00:00' AND PurchaseDate <= '2019-12-31 00:00:00'.- Nếu cột là
DATETIME, ngày kết thúc'2019-12-31'chỉ bao gồm đến 00:00:00 sáng sớm — có thể bỏ sót dữ liệu trong ngày 31/12. - An toàn hơn:
WHERE PurchaseDate >= '2019-10-02' AND PurchaseDate < '2020-01-01'.
Mở rộng: Tổng theo nhóm (GROUP BY)
SELECT
DATE(PurchaseDate) AS sale_date,
SUM(Value) AS daily_total
FROM DemoTable1444
WHERE PurchaseDate >= '2019-10-02' AND PurchaseDate < '2020-01-01'
GROUP BY DATE(PurchaseDate)
ORDER BY sale_date;
Trả về tổng doanh thu từng ngày trong khoảng thời gian.