ใช้ COUNT() ร่วมกับ GROUP BY เพื่อนับจำนวนครั้งที่แต่ละค่าปรากฏ (Duplicate count)
สร้างตารางตัวอย่าง
mysql> create table DemoTable (
StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentSubject varchar(40) );
Query OK, 0 rows affected (5.03 sec)
เพิ่มข้อมูลตัวอย่าง
mysql> insert into DemoTable(StudentSubject) values('MySQL'); Query OK, 1 row affected (0.78 sec)
mysql> insert into DemoTable(StudentSubject) values('Java'); Query OK, 1 row affected (0.39 sec)
mysql> insert into DemoTable(StudentSubject) values('MySQL'); Query OK, 1 row affected (1.12 sec)
mysql> insert into DemoTable(StudentSubject) values('MongoDB'); Query OK, 1 row affected (0.24 sec)
mysql> insert into DemoTable(StudentSubject) values('Java'); Query OK, 1 row affected (0.45 sec)
แสดงข้อมูลทั้งหมด
mysql> select *from DemoTable;
+-----------+----------------+ | StudentId | StudentSubject | +-----------+----------------+ | 1 | MySQL | | 2 | Java | | 3 | MySQL | | 4 | MongoDB | | 5 | Java | +-----------+----------------+ 5 rows in set (0.00 sec)
คิวรี่นับจำนวนครั้งของแต่ละวิชา
mysql> select StudentSubject,count(StudentId) from DemoTable group by StudentSubject;
ผลลัพธ์:
+----------------+------------------+ | StudentSubject | count(StudentId) | +----------------+------------------+ | MySQL | 2 | | Java | 2 | | MongoDB | 1 | +----------------+------------------+ 3 rows in set (0.00 sec)
การปรับแต่งเพิ่มเติม
- เพิ่ม Alias:
SELECT StudentSubject, COUNT(*) AS subject_count ... - เรียงลำดับ:
ORDER BY subject_count DESC - กรองเฉพาะที่ซ้ำ:
HAVING COUNT(*) > 1 - รวม DISTINCT:
COUNT(DISTINCT StudentId)(นับ ID ที่ไม่ซ้ำ)
คิวรี่หาเฉพาะข้อมูลที่ซ้ำ (Duplicate)
SELECT StudentSubject, COUNT(*) as cnt FROM DemoTable GROUP BY StudentSubject HAVING cnt > 1;
ประสิทธิภาพ
เพิ่ม Index ให้คอลัมน์ที่ GROUP BY: CREATE INDEX idx_subject ON DemoTable(StudentSubject);