คำอธิบาย
ใช้ฟังก์ชัน MONTH() ดึงเลขเดือนจาก DATE แล้วกรองใน WHERE clause ก่อนทำ SUM
ขั้นตอนการสร้างตารางและข้อมูลตัวอย่าง
mysql> create table DemoTable (
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
PurchaseDate date,
SalePrice int );
Query OK, 0 rows affected (0.51 sec)
การเพิ่มข้อมูล
mysql> insert into DemoTable(PurchaseDate, SalePrice) values('2018-01-10', 450);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable(PurchaseDate, SalePrice) values('2019-12-25', 1000);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable(PurchaseDate, SalePrice) values('2016-12-02', 5560);
Query OK, 1 row affected (0.07 sec)
mysql> insert into DemoTable(PurchaseDate, SalePrice) values('2015-02-20', 4550);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable(PurchaseDate, SalePrice) values('2015-12-11', 4110);
Query OK, 1 row affected (0.15 sec)
แสดงข้อมูลทั้งหมด
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 | +----+--------------+-----------+ 5 rows in set (0.00 sec)
คิวรี่ SUM เฉพาะเดือน ธันวาคม (เดือนที่ 12)
mysql> select SUM(SalePrice) from DemoTable where MONTH(PurchaseDate) = 12;
ผลลัพธ์
+----------------+ | SUM(SalePrice) | +----------------+ | 10670 | +----------------+ 1 row in set (0.00 sec)
คำอธิบายการคำนวณ
รวมเฉพาะแถวที่เดือน = 12:
- 2019-12-25: 1,000
- 2016-12-02: 5,560
- 2015-12-11: 4,110
- รวม: 10,670
ขยายความ: รวม GROUP BY เดือน
SELECT MONTH(PurchaseDate) as Month, SUM(SalePrice) as Total FROM DemoTable GROUP BY MONTH(PurchaseDate) ORDER BY Month;
ประสิทธิภาพ
การใช้ MONTH() ใน WHERE ทำให้ Index บน PurchaseDate ไม่ทำงาน หากตารางใหญ่ ควรใช้ Range Query:
WHERE PurchaseDate >= '2019-12-01' AND PurchaseDate < '2020-01-01'