ใช้ 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 ถ้าข้อมูลข้ามหลายปี