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

การนับจำนวนข้อมูลซ้ำใน MySQL ด้วย COUNT() และ GROUP BY

ใช้ 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);