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

แสดงข้อมูลที่มีค่าซ้ำมากกว่า 2 ครั้งใน MySQL ด้วย GROUP BY HAVING

บทนำ

การหาค่าที่ปรากฏซ้ำเกินจำนวนที่กำหนด (เช่น มากกว่า 2 ครั้ง) ใช้ GROUP BY ร่วมกับ HAVING COUNT(*) > n

ตัวอย่างการสร้างตารางและเพิ่มข้อมูล

mysql> CREATE TABLE DemoTable (
    -> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> Subject VARCHAR(100)
    -> );
Query OK, 0 rows affected (0.53 sec)
mysql> INSERT INTO DemoTable(Subject) VALUES('MySQL');
mysql> INSERT INTO DemoTable(Subject) VALUES('MongoDB');
mysql> INSERT INTO DemoTable(Subject) VALUES('MySQL');
mysql> INSERT INTO DemoTable(Subject) VALUES('Java');
mysql> INSERT INTO DemoTable(Subject) VALUES('SQL Server');
mysql> INSERT INTO DemoTable(Subject) VALUES('MongoDB');
mysql> INSERT INTO DemoTable(Subject) VALUES('MySQL');

แสดงข้อมูลทั้งหมด

mysql> SELECT * FROM DemoTable;

ผลลัพธ์

+----+------------+
| Id | Subject    |
+----+------------+
| 1  | MySQL      |
| 2  | MongoDB    |
| 3  | MySQL      |
| 4  | Java       |
| 5  | SQL Server |
| 6  | MongoDB    |
| 7  | MySQL      |
+----+------------+
7 rows in set (0.00 sec)

คำสั่งหาค่าที่ซ้ำมากกว่า 2 ครั้ง

mysql> SELECT Subject, COUNT(Subject) AS Freq
    -> FROM DemoTable
    -> GROUP BY Subject
    -> HAVING COUNT(Subject) > 2;

ผลลัพธ์

+---------+------+
| Subject | Freq |
+---------+------+
| MySQL   | 3    |
+---------+------+
1 row in set (0.00 sec)

คำอธิบาย

  • GROUP BY Subject - จัดกลุ่มตาม Subject
  • COUNT(Subject) - นับจำนวนในแต่ละกลุ่ม
  • HAVING COUNT(Subject) > 2 - กรองเฉพาะกลุ่มที่มีมากกว่า 2
  • ต่างจาก WHERE: HAVING ใช้กรองหลัง GROUP BY, WHERE ใช้กรองก่อน GROUP BY

การประยุกต์ใช้

-- หาข้อมูลซ้ำทั้งหมด (ปรากฏมากกว่า 1 ครั้ง)
SELECT Subject, COUNT(*) AS Count
FROM DemoTable
GROUP BY Subject
HAVING COUNT(*) > 1;

-- หาและลบข้อมูลซ้ำ (เก็บแค่แถวแรก)
DELETE t1 FROM DemoTable t1
INNER JOIN DemoTable t2
WHERE t1.Id > t2.Id AND t1.Subject = t2.Subject;