Tính tổng doanh thu theo tháng trong MySQL
Sử dụng hàm MONTH() để trích xuất tháng từ cột DATE, kết hợp SUM() và WHERE để tổng hợp theo tháng cụ thể.
1. Tạo bảng và chèn dữ liệu
mysql> CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
PurchaseDate DATE,
SalePrice INT
);
mysql> INSERT INTO DemoTable (PurchaseDate, SalePrice) VALUES
('2018-01-10', 450), ('2019-12-25', 1000), ('2016-12-02', 5560),
('2015-02-20', 4550), ('2015-12-11', 4110);
2. Xem dữ liệu
mysql> SELECT * FROM DemoTable;
+----+--------------+-----------+ | Id | PurchaseDate | SalePrice | +----+--------------+-----------+ | 1 | 2018-01-10 | 450 | | 2 | 2019-12-25 | 1000 | | 3 | 2016-12-02 | 5560 | | 4 | 2015-02-20 | 4550 | | 5 | 2015-12-11 | 4110 | +----+--------------+-----------+
3. Truy vấn: Tổng SalePrice cho tháng 12 (tháng 12 = December)
mysql> SELECT SUM(SalePrice) FROM DemoTable
WHERE MONTH(PurchaseDate) = 12;
4. Kết quả
+----------------+ | SUM(SalePrice) | +----------------+ | 10670 | +----------------+
Phân tích: 3 bản ghi tháng 12:
- 2019-12-25: 1000
- 2016-12-02: 5560
- 2015-12-11: 4110
- Tổng: 1000 + 5560 + 4110 = 10670
Mở rộng - Báo cáo theo năm và tháng:
SELECT YEAR(PurchaseDate) AS Year, MONTH(PurchaseDate) AS Month, SUM(SalePrice) AS Total FROM DemoTable GROUP BY YEAR(PurchaseDate), MONTH(PurchaseDate) ORDER BY Year, Month;
Lưu ý hiệu năng: MONTH(col) = 12 không dùng index. Tốt hơn dùng range:
WHERE PurchaseDate >= '2019-12-01' AND PurchaseDate < '2020-01-01'