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

หาค่าที่ปรากฏมากกว่า 1 ครั้งใน MySQL

ใช้ 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 เพื่อเร็วขึ้น