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

MySQL: รวมค่า (SUM) ตามเดือนด้วย EXTRACT(MONTH FROM date)

การรวมค่า (Aggregate) ตามเดือนด้วย EXTRACT() และ GROUP BY

ใช้ EXTRACT(MONTH FROM date_column) ดึงเดือน (1-12) จากวันที่ แล้ว GROUP BY เดือน เพื่อรวมค่า (SUM, COUNT, AVG) ต่อเดือน — ไม่สนใจปี

สร้างตารางและข้อมูล

mysql> create table DemoTable1415 (
    -> ProductPurchaseDate date,
    -> ProductPrice int
    -> );
Query OK, 0 rows affected (0.53 sec)

mysql> insert into DemoTable1415 values('2019-01-12', 560);
mysql> insert into DemoTable1415 values('2018-01-14', 1060);
mysql> insert into DemoTable1415 values('2017-03-21', 780);
mysql> insert into DemoTable1415 values('2016-09-01', 800);
mysql> insert into DemoTable1415 values('2019-01-14', 100);

ข้อมูลทั้งหมด

+---------------------+--------------+
| ProductPurchaseDate | ProductPrice |
+---------------------+--------------+
| 2019-01-12          | 560          |
| 2018-01-14          | 1060         |
| 2017-03-21          | 780          |
| 2016-09-01          | 800          |
| 2019-01-14          | 100          |
+---------------------+--------------+

คำสั่ง GROUP BY EXTRACT(MONTH)

mysql> select extract(MONTH from ProductPurchaseDate) as month, 
    -> sum(ProductPrice) as total_value 
    -> from DemoTable1415 
    -> group by month;

ผลลัพธ์

+-------+-------------+
| month | total_value |
+-------+-------------+
| 1     | 1720        |
| 3     | 780         |
| 9     | 800         |
+-------+-------------+

อธิบาย

  • เดือน 1 (มกราคม): 560 + 1060 + 100 = 1720 (รวมปี 2018, 2019)
  • เดือน 3 (มีนาคม): 780 (ปี 2017)
  • เดือน 9 (กันยายน): 800 (ปี 2016)

EXTRACT Units อื่นๆ

Unitคำอธิบายตัวอย่างผลลัพธ์
MICROSECONDไมโครวินาที123456
SECONDวินาที (0-59)30
MINUTEนาที (0-59)45
HOURชั่วโมง (0-23)14
DAYวัน (1-31)20
WEEKสัปดาห์ในปี (0-53)42
MONTHเดือน (1-12)10
QUARTERไตรมาส (1-4)4
YEARปี (4 หลัก)2019
YEAR_MONTHปีและเดือน201910
DAY_HOURวันและชั่วโมง2014

กรณีต้องการแยกปีด้วย (Year-Month)

SELECT 
  EXTRACT(YEAR_MONTH FROM ProductPurchaseDate) AS year_month,
  SUM(ProductPrice) AS total_value
FROM DemoTable1415
GROUP BY year_month;

ผลลัพธ์: 201901=660, 201801=1060, 201703=780, 201609=800

ประสิทธิภาพ: Index บน Date Column

สร้าง index บน ProductPurchaseDate — MySQL อาจใช้ Index สำหรับ GROUP BY (Loose Index Scan) หากไม่มี WHERE clause