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

MySQL: จัดกลุ่มและนับข้อมูลตามวันที่ด้วย GROUP BY และ COUNT

ใน 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 รายการ