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

หาข้อมูลที่มีค่าต่างกัน 2 ค่าในคอลัมน์อื่นด้วย GROUP BY HAVING ใน MySQL

บทความนี้สาธิตการหา 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) เพื่อนับเฉพาะวิชาที่แตกต่างกันจริง