ไวยากรณ์ GROUP BY หลายคอลัมน์
ระบุคอลัมน์ใน GROUP BY คั่นด้วยจุลภาค เรียงตามลำดับความสำคัญ:
SELECT column1, column2, COUNT(*)
FROM your_table
GROUP BY column1, column2;
ตัวอย่างการใช้งาน
สร้างตารางและข้อมูล (มีค่าซ้ำ)
CREATE TABLE GroupByTwoFieldsDemo (Id INT, Name VARCHAR(200));
INSERT INTO GroupByTwoFieldsDemo VALUES
(1, 'John'), (10, 'Johnson'), (9, 'Carol'), (6, 'Sam'),
(5, 'David'), (10, 'Johnson'), (6, 'Sam');
ข้อมูลทั้งหมด
+------+---------+
| Id | Name |
+------+---------+
| 1 | John |
| 10 | Johnson |
| 9 | Carol |
| 6 | Sam |
| 5 | David |
| 10 | Johnson | -- ซ้ำ
| 6 | Sam | -- ซ้ำ
+------+---------+
คำสั่ง GROUP BY 2 คอลัมน์ และนับ
SELECT Id, Name, COUNT(Id) AS count
FROM GroupByTwoFieldsDemo
GROUP BY Id, Name
ORDER BY Id DESC;
ผลลัพธ์
+------+---------+-------+
| Id | Name | count |
+------+---------+-------+
| 10 | Johnson | 2 |
| 9 | Carol | 1 |
| 6 | Sam | 2 |
| 5 | David | 1 |
| 1 | John | 1 |
+------+---------+-------+
คำอธิบาย
- กลุ่มข้อมูลที่ Id และ Name เหมือนกันทุกคู่
COUNT(Id)นับจำนวนแถวในแต่ละกลุ่มORDER BY Id DESCเรียงผลลัพธ์ Id มากไปน้อย
ข้อควรระวัง: ONLY_FULL_GROUP_BY
MySQL 5.7+ เปิดโหมด ONLY_FULL_GROUP_BY โดยค่าเริ่มต้น ต้องระบุทุกคอลัมน์ใน SELECT ให้อยู่ใน GROUP BY หรืออยู่ใน Aggregate Function
-- ถูกต้อง
SELECT Id, Name, COUNT(*) FROM t GROUP BY Id, Name;
-- ผิด (ถ้า Name ไม่อยู่ใน GROUP BY)
SELECT Id, Name, COUNT(*) FROM t GROUP BY Id;