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

MySQL: SUM คอลัมน์เฉพาะเดือนที่กำหนด (เช่น ธันวาคม) ด้วย MONTH()


คำอธิบาย

ใช้ฟังก์ชัน 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'