Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Chọn nhiều hàng có giá trị MAX trùng lặp trong MySQL

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.