บทความนี้สาธิตการหา StudentName ที่มี SubjectName ต่างกันมากกว่า 1 ค่า (คือเรียนหลายวิชา) โดยใช้ GROUP BY ... HAVING COUNT(DISTINCT ...) > 1
สร้างตารางและข้อมูลนักเรียน-วิชา
mysql> CREATE TABLE DemoTable751(
StudentName VARCHAR(100),
SubjectName VARCHAR(100)
);
Query OK, 0 rows affected (0.66 sec)
mysql> INSERT INTO DemoTable751 VALUES('John', 'MySQL'), ('John', 'MongoDB'), ('Sam', 'MySQL'), ('Carol', 'Java'), ('David', 'MySQL'), ('Carol', 'MongoDB');
คิวรีหานักเรียนที่เรียนมากกว่า 1 วิชา
mysql> SELECT StudentName FROM DemoTable751
GROUP BY StudentName
HAVING COUNT(SubjectName) > 1;
ผลลัพธ์
+-------------+
| StudentName |
+-------------+
| John |
| Carol |
+-------------+
คำอธิบาย:
GROUP BY StudentName- จัดกลุ่มตามชื่อนักเรียนCOUNT(SubjectName)- นับจำนวนวิชาในแต่ละกลุ่ม (ไม่นับ NULL)HAVING COUNT(...) > 1- กรองเฉพาะกลุ่มที่มีวิชามากกว่า 1- John เรียน MySQL, MongoDB (2 วิชา) - ผ่าน
- Carol เรียน Java, MongoDB (2 วิชา) - ผ่าน
- Sam, David เรียนแค่ 1 วิชา - ไม่ผ่าน
แนะนำ: ใช้ COUNT(DISTINCT SubjectName) หากข้อมูลอาจมีแถวซ้ำซ้อน (Duplicate Rows) เพื่อนับเฉพาะวิชาที่แตกต่างกันจริง