Sử dụng DATE() trích xuất ngày từ DATETIME, sau đó GROUP BY và SUM() để cộng dồn số lượng theo từng ngày.
Tạo bảng
mysql> CREATE TABLE DemoTable (ShippingDate DATETIME, CountOfDate INT);
Chèn dữ liệu (nhiều hàng cùng ngày)
mysql> INSERT INTO DemoTable VALUES('2018-01-31', 6), ('2016-12-01', 15), ('2016-12-01', 10), ('2016-12-01', 5), ('2019-04-09', 3), ('2018-01-31', 4), ('2019-04-09', 4);
Xem dữ liệu gốc
mysql> SELECT * FROM DemoTable;
+---------------------+-------------+ | ShippingDate | CountOfDate | +---------------------+-------------+ | 2018-01-31 00:00:00 | 6 | | 2016-12-01 00:00:00 | 15 | | 2016-12-01 00:00:00 | 10 | | 2016-12-01 00:00:00 | 5 | | 2019-04-09 00:00:00 | 3 | | 2018-01-31 00:00:00 | 4 | | 2019-04-09 00:00:00 | 4 | +---------------------+-------------+
Tổng số lượng theo từng ngày
mysql> SELECT DATE(ShippingDate), SUM(CountOfDate) FROM DemoTable GROUP BY DATE(ShippingDate);
+--------------------+------------------+ | DATE(ShippingDate) | SUM(CountOfDate) | +--------------------+------------------+ | 2018-01-31 | 10 | | 2016-12-01 | 30 | | 2019-04-09 | 7 | +--------------------+------------------+
Giải thích
DATE(ShippingDate): Bỏ phần giờ, chỉ giữ ngàyGROUP BY DATE(ShippingDate): Gom hàng cùng ngàySUM(CountOfDate): Cộng dồn giá trị CountOfDate trong mỗi nhóm
Mở rộng: Thêm thống kê khác
SELECT
DATE(ShippingDate) AS ShipDate,
COUNT(*) AS Records,
SUM(CountOfDate) AS TotalCount,
AVG(CountOfDate) AS AvgCount,
MIN(CountOfDate) AS MinCount,
MAX(CountOfDate) AS MaxCount
FROM DemoTable
GROUP BY DATE(ShippingDate)
ORDER BY ShipDate;
Lưu ý hiệu năng
GROUP BY DATE(col)không dùng index trêncol(function-based)- Tạo Generated Column:
ShipDate DATE GENERATED ALWAYS AS (DATE(ShippingDate)) STORED+ index - Hoặc lưu riêng cột
DATEkhi INSERT