Đôi khi bạn có thể cần tổng hợp dữ liệu theo tháng trong MySQL. Trong bài viết này, chúng ta sẽ xem xét các cách khác nhau để nhóm theo tháng trong MySQL.
Cách nhóm theo tháng trong MySQL
Chúng tôi sẽ sử dụng date_format chức năng định dạng ngày thành các giá trị tháng và nhóm theo tháng.
Đây là cú pháp của hàm date_format.
date_format(value, format string)
Trong hàm trên, bạn cần chỉ định giá trị dưới dạng chữ, một hàm hoặc tên cột khác và một chuỗi định dạng chỉ định định dạng mà giá trị này cần được chuyển đổi sang.
Đây là một ví dụ để chuyển đổi một chuỗi ngày thành tháng.
mysql> SELECT DATE_FORMAT("2020-06-15", "%M"); +---------------------------------+ | DATE_FORMAT("2020-06-15", "%M") | +---------------------------------+ | June | +---------------------------------+
Giả sử bạn có bảng doanh số bán hàng (id, order_date, amount)
mysql> create table sales(id int, order_date date, amount int); mysql> insert into sales(id,order_date,amount) values(1,'2020-10-01',150), (2,'2020-10-10',100), (3,'2020-11-05',250), (4,'2020-11-15',150), (5,'2020-12-01',350), (6,'2020-12-21',250); mysql> select * from sales; +------+------------+--------+ | id | order_date | amount | +------+------------+--------+ | 1 | 2020-10-01 | 150 | | 2 | 2020-10-10 | 100 | | 3 | 2020-11-05 | 250 | | 4 | 2020-11-15 | 150 | | 5 | 2020-12-01 | 350 | | 6 | 2020-12-21 | 250 | +------+------------+--------+
Cũng nên đọc:Cách loại bỏ Ràng buộc NOT NULL trong MySQL
Tên nhóm theo tháng
Đây là truy vấn SQL để nhóm theo tên tháng.
mysql> select date_format(order_date, '%M'),sum(amount) from sales group by date_format(order_date, '%M'); +-------------------------------+-------------+ | date_format(order_date, '%M') | sum(amount) | +-------------------------------+-------------+ | December | 600 | | November | 400 | | October | 250 | +-------------------------------+-------------+
Trong truy vấn SQL ở trên, chúng tôi sử dụng date_format (order_date, “% M”) để chuyển đổi cột ngày thành tên tháng và sử dụng sum để cộng số tiền bán hàng.
Nhóm theo tháng và năm
Đây là truy vấn SQL để nhóm theo tháng và năm.
mysql> select date_format(order_date, '%M %Y'),sum(amount) from sales group by year(order_date),month(order_date); +----------------------------------+-------------+ | date_format(order_date, '%M %Y') | sum(amount) | +----------------------------------+-------------+ | October 2020 | 250 | | November 2020 | 400 | | December 2020 | 600 | +----------------------------------+-------------+
Trong truy vấn trên, chúng tôi sử dụng date_format để chuyển đổi các giá trị của cột ngày thành tên tháng và năm. Chúng tôi cũng sử dụng các hàm YEAR () và MONTH () để đảm bảo rằng dữ liệu được nhóm và sắp xếp theo số tháng và năm.
Trong truy vấn trên, nếu chúng tôi sử dụng date_format chức năng trong nhóm theo mệnh đề, sau đó MySQL sẽ sắp xếp các nhóm theo thứ tự bảng chữ cái, thay vì theo thứ tự thời gian. Xem bên dưới.
mysql> select date_format(order_date, '%M'),sum(amount) from sales group by date_format(order_date, '%M'); +-------------------------------+-------------+ | date_format(order_date, '%M') | sum(amount) | +-------------------------------+-------------+ | December | 600 | | November | 400 | | October | 250 | +-------------------------------+-------------+
Cần một công cụ báo cáo cho MySQL? Ubiq giúp dễ dàng trực quan hóa dữ liệu trong vài phút và theo dõi trong trang tổng quan thời gian thực. Thử nó ngay hôm nay!