ใช้ GROUP BY ... HAVING COUNT(*) > 1 เพื่อหาค่าที่ซ้ำ
ตัวอย่างการใช้งาน
1. สร้างตารางและข้อมูลมีค่าซ้ำ
mysql> CREATE TABLE DemoTable (value INT); mysql> INSERT INTO DemoTable VALUES (10), (100), (20), (10), (30), (40), (20);
2. หาค่าที่ปรากฏ > 1 ครั้ง
mysql> SELECT * FROM DemoTable GROUP BY value HAVING COUNT(*) > 1;
ผลลัพธ์
+-------+ | value | +-------+ | 10 | | 20 | +-------+
รูปแบบ Query อื่นๆ
แสดงค่าพร้อมจำนวนครั้ง
SELECT value, COUNT(*) AS cnt FROM DemoTable GROUP BY value HAVING cnt > 1;
นับจำนวนค่าที่ซ้ำ (Distinct values ที่ซ้ำ)
SELECT COUNT(*) FROM (
SELECT value FROM DemoTable GROUP BY value HAVING COUNT(*) > 1
) AS duplicates;
ลบแถวซ้ำ เก็บแค่แถวแรก (MySQL 8.0+)
DELETE t1 FROM DemoTable t1 JOIN DemoTable t2 ON t1.value = t2.value AND t1.id > t2.id;
ข้อควรระวัง
SELECT * ... GROUP BY valueใน MySQL คืนค่าคอลัมน์อื่นแบบสุ่ม (ONLY_FULL_GROUP_BY ปิด) → แนะนำระบุคอลัมน์ชัดเจน- สร้าง Index บนคอลัมน์ที่ GROUP BY เพื่อเร็วขึ้น