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

แสดงเฉพาะค่าที่ซ้ำมากกว่าหรือเท่ากับ 3 ครั้งใน MySQL ด้วย HAVING COUNT

เมื่อต้องการหาค่าที่ปรากฏซ้ำในคอลัมน์เฉพาะ และแสดงเฉพาะค่าที่ซ้ำมากกว่าหรือเท่ากับ N ครั้ง ให้ใช้ GROUP BY ร่วมกับ HAVING COUNT(*) >= N

ตัวอย่างการใช้งาน

สร้างตารางและเพิ่มข้อมูลชื่อนักเรียน (มีค่าซ้ำหลายค่า):

mysql> create table DemoTable1351 (StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY, StudentName varchar(40));
mysql> insert into DemoTable1351(StudentName) values('Chris'),('Bob'),('Bob'),('David'),('Bob'),('David'),('Bob'),('Mike'),('David');

ข้อมูลทั้งหมด (Bob 4 ครั้ง, David 3 ครั้ง, Chris 1, Mike 1):

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 1         | Chris       |
| 2         | Bob         |
| 3         | Bob         |
| 4         | David       |
| 5         | Bob         |
| 6         | David       |
| 7         | Bob         |
| 8         | Mike        |
| 9         | David       |
+-----------+-------------+

คำสั่งแสดงชื่อที่ซ้ำ >= 3 ครั้ง

mysql> select * from DemoTable1351
    -> group by StudentName
    -> having count(StudentName) >= 3;

ผลลัพธ์ (เฉพาะ Bob และ David)

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 2         | Bob         |
| 4         | David       |
+-----------+-------------+

คำอธิบาย:

  • GROUP BY StudentName จัดกลุ่มตามชื่อ
  • COUNT(StudentName) นับจำนวนแถวในแต่ละกลุ่ม
  • HAVING COUNT(...) >= 3 กรองกลุ่มที่มีจำนวน 3 ขึ้นไป
  • SELECT * จะแสดงคอลัมน์ที่ GROUP BY (StudentName) และคอลัมน์อื่นอาจแสดงค่าแถวแรกของกลุ่ม (MySQL อนุญาต แต่ไม่ใช่มาตรฐาน SQL) ควรระบุ SELECT StudentName, COUNT(*) แทน