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

Tính tổng cột theo ngày trùng lặp trong MySQL (SUM + GROUP BY DATE)

Khi nhiều bản ghi cùng một ngày (cột DATE hoặc DATETIME), dùng GROUP BY trên cột ngày và SUM() để tính tổng giá trị tương ứng.

Cú pháp

SELECT cot_ngay, SUM(cot_so) AS tong_gia_tri
FROM ten_bang
GROUP BY cot_ngay;

Nếu cột là DATETIME, dùng GROUP BY DATE(cot_datetime).

Ví dụ minh họa

Tạo bảng mua hàng:

mysql> CREATE TABLE DemoTable1522 (
    -> ProductPurchaseDate DATE,
    -> NumberOfProduct INT
    -> );
mysql> INSERT INTO DemoTable1522 VALUES
    -> ('2019-01-21', 45), ('2018-12-31', 78), ('2019-01-21', 67),
    -> ('2019-03-01', 56), ('2018-01-21', 97), ('2019-01-21', 47);

Truy vấn tổng số sản phẩm theo ngày:

mysql> SELECT ProductPurchaseDate, SUM(NumberOfProduct)
    -> FROM DemoTable1522
    -> GROUP BY ProductPurchaseDate;

Kết quả:

+---------------------+----------------------+
| ProductPurchaseDate | SUM(NumberOfProduct) |
+---------------------+----------------------+
| 2019-01-21          |                  159 |  -- 45+67+47
| 2018-12-31          |                   78 |
| 2019-03-01          |                   56 |
| 2018-01-21          |                   97 |
+---------------------+----------------------+

Mở rộng

  • Nhóm theo tháng: GROUP BY YEAR(cot), MONTH(cot) hoặc GROUP BY DATE_FORMAT(cot, '%Y-%m').
  • Nhóm theo tuần: GROUP BY YEARWEEK(cot).
  • Thêm HAVING SUM(...) > 100 lọc nhóm.
  • Index trên ProductPurchaseDate tăng tốc GROUP BY lớn.

⚠️ Cột DATETIME

Nếu cột là DATETIME (có giờ), GROUP BY cot sẽ tách từng giây. Phải dùng GROUP BY DATE(cot) để gom theo ngày.