การนับจำนวนข้อมูลซ้ำด้วย COUNT() และ GROUP BY
ใช้ Aggregate Function COUNT() ร่วมกับ GROUP BY เพื่อนับจำนวนแถวที่มีค่า ID ซ้ำกัน และแสดงจำนวนในคอลัมน์ใหม่
รูปแบบคำสั่ง
SELECT column_name, COUNT(*) AS count_alias
FROM table_name
GROUP BY column_name;
ตัวอย่าง: นับจำนวน ID ซ้ำ
1. สร้างตารางและเพิ่มข้อมูล
CREATE TABLE DemoTable (
Id INT,
Name VARCHAR(100)
);
INSERT INTO DemoTable VALUES (50, 'Chris');
INSERT INTO DemoTable VALUES (51, 'David');
INSERT INTO DemoTable VALUES (51, 'Mike');
INSERT INTO DemoTable VALUES (50, 'Sam');
2. ดูข้อมูลทั้งหมด
SELECT * FROM DemoTable;
ผลลัพธ์:
+------+-------+
| Id | Name |
+------+-------+
| 50 | Chris |
| 51 | David |
| 51 | Mike |
| 50 | Sam |
+------+-------+
3. นับจำนวน ID ซ้ำ แสดงในคอลัมน์ Count
SELECT Id, COUNT(Name) AS Count
FROM DemoTable
GROUP BY Id;
ผลลัพธ์:
+------+-------+
| Id | Count |
+------+-------+
| 50 | 2 |
| 51 | 2 |
+------+-------+
การใช้งานขั้นสูง
แสดงเฉพาะ ID ที่ซ้ำ (Count > 1)
SELECT Id, COUNT(*) AS Count
FROM DemoTable
GROUP BY Id
HAVING COUNT(*) > 1;
นับค่า Distinct ในคอลัมน์อื่น
SELECT Id, COUNT(DISTINCT Name) AS UniqueNames
FROM DemoTable
GROUP BY Id;
แสดงรายละเอียดพร้อมจำนวนซ้ำ
SELECT d.*, dup.Count
FROM DemoTable d
JOIN (
SELECT Id, COUNT(*) AS Count
FROM DemoTable
GROUP BY Id
) dup ON d.Id = dup.Id;
COUNT(*) vs COUNT(column) vs COUNT(DISTINCT column)
| คำสั่ง | ความหมาย |
|---|---|
COUNT(*) | นับจำนวนแถวทั้งหมด (รวม NULL) |
COUNT(column) | นับจำนวนค่าที่ไม่ใช่ NULL ในคอลัมน์นั้น |
COUNT(DISTINCT column) | นับจำนวนค่าที่ไม่ซ้ำและไม่ใช่ NULL |
ประสิทธิภาพ
- สร้าง Index บนคอลัมน์ที่ GROUP BY เพื่อเร่งการจัดกลุ่ม
EXPLAIN SELECT ... GROUP BY Idเพื่อดู Execution Plan