Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

SELECT และ Filter ข้อมูลตามเดือนใน MySQL ด้วย GROUP BY และ SUM

ใช้ MONTH() หรือ MONTHNAME() ร่วมกับ GROUP BY และ SUM() เพื่อรวมข้อมูลรายเดือน

ตัวอย่างการใช้งาน

สร้างตาราง:

mysql> create table SelectPerMonthDemo (
    -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> Price int, PurchaseDate datetime
    -> );

เพิ่มข้อมูล (กระจายหลายเดือน):

mysql> INSERT INTO SelectPerMonthDemo(Price,PurchaseDate) VALUES 
(600, DATE_ADD(NOW(), INTERVAL -1 MONTH)),
(600, DATE_ADD(NOW(), INTERVAL 2 MONTH)),
(400, NOW()),
(800, DATE_ADD(NOW(), INTERVAL 3 MONTH)),
(900, DATE_ADD(NOW(), INTERVAL 4 MONTH)),
(100, DATE_ADD(NOW(), INTERVAL 4 MONTH)),
(1200, DATE_ADD(NOW(), INTERVAL -1 MONTH));

ข้อมูล (สมมติ NOW = 2019-02-10):

+----+-------+---------------------+
| Id | Price | PurchaseDate        |
+----+-------+---------------------+
|  1 |   600 | 2019-01-10 22:39:30 |
|  2 |   600 | 2019-04-10 22:39:47 |
|  3 |   400 | 2019-02-10 22:40:03 |
|  4 |   800 | 2019-05-10 22:40:18 |
|  5 |   900 | 2019-06-10 22:40:29 |
|  6 |   100 | 2019-06-10 22:40:41 |
|  7 |  1200 | 2019-01-10 22:40:50 |
+----+-------+---------------------+

รวมราคาต่อเดือน (แสดงชื่อเดือน):

mysql> SELECT MONTHNAME(PurchaseDate) AS MONTHNAME, SUM(Price) 
    -> FROM SelectPerMonthDemo GROUP BY MONTHNAME(PurchaseDate);
+-----------+------------+
| MONTHNAME | SUM(Price) |
+-----------+------------+
| January   |       1800 |
| April     |        600 |
| February  |        400 |
| May       |        800 |
| June      |       1000 |
+-----------+------------+

รวมราคาต่อเดือน (แสดงเลขเดือน):

mysql> SELECT MONTH(PurchaseDate), SUM(Price) 
    -> FROM SelectPerMonthDemo GROUP BY MONTH(PurchaseDate);
+---------------------+------------+
| MONTH(PurchaseDate) | SUM(Price) |
+---------------------+------------+
|                   1 |       1800 |
|                   4 |        600 |
|                   2 |        400 |
|                   5 |        800 |
|                   6 |       1000 |
+---------------------+------------+

หมายเหตุ: ควรเพิ่ม YEAR() ใน GROUP BY ถ้าข้อมูลข้ามหลายปี