Tạo bảng điểm có giá trị trùng lặp
mysql> CREATE TABLE DemoTable1389 (
-> StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentMarks INT
-> );
Query OK, 0 rows affected (2.73 sec)
mysql> INSERT INTO DemoTable1389(StudentMarks) VALUES
-> (40),(40),(68),(78),(97),(97),(97);
Dữ liệu
mysql> SELECT * FROM DemoTable1389;
+-----------+--------------+
| StudentId | StudentMarks |
+-----------+--------------+
| 1 | 40 |
| 2 | 40 |
| 3 | 68 |
| 4 | 78 |
| 5 | 97 |
| 6 | 97 |
| 7 | 97 |
+-----------+--------------+
Truy vấn: JOIN với subquery MAX để lấy tất cả hàng có điểm cao nhất
mysql> SELECT tbl.StudentId, tbl.StudentMarks
-> FROM DemoTable1389 tbl
-> JOIN (SELECT MAX(StudentMarks) AS MaxMarks FROM DemoTable1389) tbl1
-> ON tbl1.MaxMarks = tbl.StudentMarks;
Kết quả: 3 hàng có điểm 97
+-----------+--------------+
| StudentId | StudentMarks |
+-----------+--------------+
| 5 | 97 |
| 6 | 97 |
| 7 | 97 |
+-----------+--------------+
Cách khác (MySQL 8.0+): Dùng window function RANK() OVER (ORDER BY StudentMarks DESC) rồi lọc rank = 1.