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

หาแถวซ้ำและนับจำนวนแล้วแสดงในคอลัมน์แยกด้วย GROUP BY HAVING ใน MySQL

การค้นหาแถวที่ซ้ำกันสมบูรณ์และนับจำนวน

เพื่อหาแถวที่มีค่าซ้ำกันในหลายคอลัมน์พร้อมกัน และนับจำนวนครั้งที่ซ้ำ เราใช้ 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 ไม่ซ้ำ จึงไม่แสดง