การค้นหาแถวที่ซ้ำกันสมบูรณ์และนับจำนวน
เพื่อหาแถวที่มีค่าซ้ำกันในหลายคอลัมน์พร้อมกัน และนับจำนวนครั้งที่ซ้ำ เราใช้ GROUP BY ทุกคอลัมน์ที่ต้องการตรวจสอบ ร่วมกับ HAVING COUNT(*) > 1
สร้างตารางและเพิ่มข้อมูล
mysql> CREATE TABLE DemoTable (Name VARCHAR(100), Age INT);
Query OK, 0 rows affected (1.50 sec)
mysql> INSERT INTO DemoTable VALUES('Chris',23);
mysql> INSERT INTO DemoTable VALUES('David',21);
mysql> INSERT INTO DemoTable VALUES('Chris',23);
mysql> INSERT INTO DemoTable VALUES('Chris',21);
mysql> INSERT INTO DemoTable VALUES('Mike',25);
mysql> INSERT INTO DemoTable VALUES('David',21);
แสดงข้อมูลทั้งหมด
mysql> SELECT * FROM DemoTable;
ผลลัพธ์:
+-------+------+
| Name | Age |
+-------+------+
| Chris | 23 |
| David | 21 |
| Chris | 23 |
| Chris | 21 |
| Mike | 25 |
| David | 21 |
+-------+------+
6 rows in set (0.00 sec)
คำสั่งหาแถวซ้ำและนับจำนวน
mysql> SELECT Name, Age, COUNT(*) AS Repeated
FROM DemoTable GROUP BY Name, Age HAVING Repeated > 1;
ผลลัพธ์:
+-------+------+----------+
| Name | Age | Repeated |
+-------+------+----------+
| Chris | 23 | 2 |
| David | 21 | 2 |
+-------+------+----------+
2 rows in set (0.00 sec)
คำอธิบาย
GROUP BY Name, Age: จัดกลุ่มตามคู่ (Name, Age) → แถวที่มีทั้ง Name และ Age เหมือนกันจะอยู่กลุ่มเดียวกันCOUNT(*) AS Repeated: นับจำนวนแถวในแต่ละกลุ่มHAVING Repeated > 1: กรองเฉพาะกลุ่มที่มี 2 แถวขึ้นไป (คือซ้ำ)- Chris 23 ซ้ำ 2 ครั้ง, David 21 ซ้ำ 2 ครั้ง, Chris 21 และ Mike 25 ไม่ซ้ำ จึงไม่แสดง