ใน MySQL สามารถใช้คำสั่ง GROUP BY ร่วมกับฟังก์ชัน COUNT() เพื่อจัดกลุ่มและนับจำนวนแถวข้อมูลตามวันที่หรือคอลัมน์ที่ต้องการได้ รูปแบบคำสั่งพื้นฐานมีดังนี้:
SELECT column_name1, column_name2, ..., COUNT(*) AS alias_name
FROM table_name
GROUP BY column_name1, column_name2, ...;
ตัวอย่างการใช้งาน
สร้างตารางตัวอย่างชื่อ GroupAndCountByDate:
CREATE TABLE GroupAndCountByDate (
Id INT NOT NULL AUTO_INCREMENT,
TripDate DATE,
ShopId INT,
PRIMARY KEY (Id)
);
เพิ่มข้อมูลตัวอย่าง:
INSERT INTO GroupAndCountByDate (TripDate, ShopId) VALUES
('2019-01-31', 10),
('2019-02-01', 15),
('2019-01-31', 10),
('2019-02-01', 15),
('2019-03-23', 20),
('2019-04-21', 25),
('2019-03-13', 20),
('2019-04-06', 25);
แสดงข้อมูลทั้งหมดในตาราง:
SELECT * FROM GroupAndCountByDate;
ผลลัพธ์:
+----+------------+--------+
| Id | TripDate | ShopId |
+----+------------+--------+
| 1 | 2019-01-31 | 10 |
| 2 | 2019-02-01 | 15 |
| 3 | 2019-01-31 | 10 |
| 4 | 2019-02-01 | 15 |
| 5 | 2019-03-23 | 20 |
| 6 | 2019-04-21 | 25 |
| 7 | 2019-03-13 | 20 |
| 8 | 2019-04-06 | 25 |
+----+------------+--------+
คำสั่งจัดกลุ่มและนับตามวันที่และร้านค้า
SELECT TripDate, ShopId, COUNT(*) AS TOTALTRIP
FROM GroupAndCountByDate
GROUP BY TripDate, ShopId;
ผลลัพธ์:
+------------+--------+-----------+
| TripDate | ShopId | TOTALTRIP |
+------------+--------+-----------+
| 2019-01-31 | 10 | 2 |
| 2019-02-01 | 15 | 2 |
| 2019-03-23 | 20 | 1 |
| 2019-04-21 | 25 | 1 |
| 2019-03-13 | 20 | 1 |
| 2019-04-06 | 25 | 1 |
+------------+--------+-----------+
จากตัวอย่างจะเห็นว่าระบบจัดกลุ่มข้อมูลที่มี TripDate และ ShopId เหมือนกัน แล้วนับจำนวนแถวในแต่ละกลุ่ม เช่น วันที่ 2019-01-31 ร้านค้า 10 มี 2 รายการ