บทความนี้สาธิตการใช้ GROUP BY ... HAVING เพื่อค้นหาค่าที่ปรากฏซ้ำ (Duplicate Values) และนับจำนวนครั้งที่เกิดขึ้น
สร้างตารางและข้อมูลทดสอบ
mysql> CREATE TABLE DemoTable673(
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Value INT
);
Query OK, 0 rows affected (0.59 sec)
mysql> INSERT INTO DemoTable673(Value) VALUES(10);
mysql> INSERT INTO DemoTable673(Value) VALUES(20);
mysql> INSERT INTO DemoTable673(Value) VALUES(10);
mysql> INSERT INTO DemoTable673(Value) VALUES(30);
mysql> INSERT INTO DemoTable673(Value) VALUES(20);
mysql> INSERT INTO DemoTable673(Value) VALUES(10);
mysql> INSERT INTO DemoTable673(Value) VALUES(10);
คิวรีหาค่าที่ซ้ำและนับจำนวน
mysql> SELECT Id, COUNT(*) AS myValue
FROM DemoTable673
GROUP BY Value
HAVING COUNT(*) > 1;
ผลลัพธ์
+----+---------+
| Id | myValue |
+----+---------+
| 1 | 4 |
| 2 | 2 |
+----+---------+
คำอธิบาย:
GROUP BY Value- จัดกลุ่มตามค่า ValueCOUNT(*)- นับจำนวนแถวในแต่ละกลุ่มHAVING COUNT(*) > 1- กรองเฉพาะกลุ่มที่มีมากกว่า 1 แถว (ค่าซ้ำ)- คอลัมน์ Id ที่แสดงคือ Id แรกของแต่ละกลุ่ม (ขึ้นกับการจัดเก็บ)
หมายเหตุ: ใน MySQL 5.7+ ที่เปิด ONLY_FULL_GROUP_BY ต้องใช้ Aggregate Function สำหรับคอลัมน์ที่ไม่ได้อยู่ใน GROUP BY เช่น MIN(Id) หรือ ANY_VALUE(Id)