การนับค่าที่ซ้ำกันในคอลัมน์ด้วย GROUP BY HAVING
เพื่อหาว่ามีค่าใดบ้างที่ปรากฏซ้ำกันและแต่ละค่าซ้ำกี่ครั้ง เราใช้ GROUP BY ร่วมกับ HAVING COUNT(*) > 1
สร้างตารางและเพิ่มข้อมูล
mysql> CREATE TABLE DemoTable (Data INT);
Query OK, 0 rows affected (0.98 sec)
mysql> INSERT INTO DemoTable VALUES(60);
mysql> INSERT INTO DemoTable VALUES(40);
mysql> INSERT INTO DemoTable VALUES(50);
mysql> INSERT INTO DemoTable VALUES(60);
mysql> INSERT INTO DemoTable VALUES(40);
mysql> INSERT INTO DemoTable VALUES(80);
แสดงข้อมูลทั้งหมด
mysql> SELECT * FROM DemoTable;
ผลลัพธ์:
+------+
| Data |
+------+
| 60 |
| 40 |
| 50 |
| 60 |
| 40 |
| 80 |
+------+
6 rows in set (0.00 sec)
คำสั่งนับจำนวนค่าซ้ำ
mysql> SELECT COUNT(*) FROM DemoTable GROUP BY Data HAVING COUNT(Data) > 1;
ผลลัพธ์:
+----------+
| count(*) |
+----------+
| 2 |
| 2 |
+----------+
2 rows in set (0.03 sec)
คำอธิบาย
GROUP BY Data: จัดกลุ่มตามค่าในคอลัมน์ DataHAVING COUNT(Data) > 1: กรองเฉพาะกลุ่มที่มีจำนวนแถวมากกว่า 1 (คือค่าซ้ำ)- ผลลัพธ์แสดงจำนวนครั้งของแต่ละค่าที่ซ้ำ (60 ซ้ำ 2 ครั้ง, 40 ซ้ำ 2 ครั้ง)
- หากต้องการดูค่าที่ซ้ำพร้อมจำนวน ให้ใช้
SELECT Data, COUNT(*) ...