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

ใช้ GROUP BY 2 คอลัมน์ และนับจำนวนใน MySQL


ไวยากรณ์ 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;