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

รวมยอดขายตามวันใน MySQL ใช้ GROUP BY DATE()

เมื่อตารางเก็บวันที่-เวลา (DATETIME/TIMESTAMP) และต้องการรวมยอด (SUM) ตามวัน (ตัดเวลาออก) ให้ใช้ DATE() ใน GROUP BY

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

สร้างตารางขายสินค้า:

mysql> create table DemoTable1358 (PurchaseDate datetime, ProductPrice int);
mysql> insert into DemoTable1358 values('2019-09-20 12:34:00',450),('2019-09-21 11:00:00',1050),('2018-09-21 02:10:00',2050),('2019-09-21 05:20:40',5050),('2016-09-21 04:10:56',1000);

ข้อมูลทั้งหมด (มี 3 รายการวันที่ 21 ก.ย. ปีต่างกัน):

+---------------------+--------------+
| PurchaseDate        | ProductPrice |
+---------------------+--------------+
| 2019-09-20 12:34:00 | 450          |
| 2019-09-21 11:00:00 | 1050         |
| 2018-09-21 02:10:00 | 2050         |
| 2019-09-21 05:20:40 | 5050         |
| 2016-09-21 04:10:56 | 1000         |
+---------------------+--------------+

คำสั่งรวมยอดตามวันที่ (เฉพาะส่วนวันที่)

mysql> select PurchaseDate, sum(ProductPrice) from DemoTable1358 group by date(PurchaseDate);

ผลลัพธ์ (วันที่ 21 ก.ย. 2019 รวม 1050+5050=6100)

+---------------------+-------------------+
| PurchaseDate        | sum(ProductPrice) |
+---------------------+-------------------+
| 2019-09-20 12:34:00 | 450               |
| 2019-09-21 11:00:00 | 6100              |
| 2018-09-21 02:10:00 | 2050              |
| 2016-09-21 04:10:56 | 1000              |
+---------------------+-------------------+

คำอธิบาย:

  • DATE(PurchaseDate) ดึงเฉพาะส่วนวันที่ (YYYY-MM-DD) จาก DATETIME
  • GROUP BY DATE(PurchaseDate) จัดกลุ่มแถวที่มีวันที่เท่ากัน (แม้เวลาจะต่างกัน)
  • SUM(ProductPrice) รวมราคาในแต่ละกลุ่มวัน
  • คอลัมน์ PurchaseDate ใน SELECT จะแสดงค่าแถวแรกของกลุ่ม (Non-standard) ควรใช้ DATE(PurchaseDate) as SaleDate แทน
  • เพื่อประสิทธิภาพ: สร้าง Index บน PurchaseDate หรือ Computed/Generated Column สำหรับ DATE