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

Tính tổng từ bảng MySQL theo tháng

Tổng hợp dữ liệu theo tháng với GROUP BY MONTH()

Sử dụng MONTH() và YEAR() trích xuất từ cột DATE, kết hợp GROUP BY và SUM().

Tạo bảng và dữ liệu

mysql> create table DemoTable1628 ( 
    PurchaseDate date, 
    Amount int 
); 
Query OK, 0 rows affected (1.55 sec)
mysql> insert into DemoTable1628 values('2019-01-10',1500); 
mysql> insert into DemoTable1628 values('2019-10-10',2000); 
mysql> insert into DemoTable1628 values('2019-10-24',100); 
mysql> insert into DemoTable1628 values('2019-11-10',500); 
mysql> insert into DemoTable1628 values('2019-12-10',1600); 
mysql> insert into DemoTable1628 values('2019-10-10',900);

Truy vấn tổng theo tháng

mysql> select month(PurchaseDate) as Month, year(PurchaseDate) as Year, SUM(Amount) 
    -> from DemoTable1628 
    -> group by month(PurchaseDate);

Kết quả

+-------+------+-------------+ 
| Month | Year | SUM(Amount) | 
+-------+------+-------------+ 
| 1     | 2019 | 1500        | 
| 10    | 2019 | 3000        | 
| 11    | 2019 | 500         | 
| 12    | 2019 | 1600        | 
+-------+------+-------------+

⚠️ Vấn đề tiềm ẩn: GROUP BY month(PurchaseDate) gộp tháng 10 năm 2019 và tháng 10 năm 2020 lại với nhau nếu có dữ liệu nhiều năm.

Sửa đúng: GROUP BY YEAR(PurchaseDate), MONTH(PurchaseDate) hoặc GROUP BY DATE_FORMAT(PurchaseDate, '%Y-%m').

Mẹo hiệu năng: Tạo index trên cột PurchaseDate. Tránh dùng function trên cột trong WHERE nếu cần lọc khoảng thời gian.