Để tìm giá trị lớn thứ 2 (second largest) trong MySQL, bạn có thể dùng subquery lồng nhau: tìm MAX, rồi tìm MAX của các giá trị < MAX đó.
Ví dụ minh họa
Tạo bảng điểm:
mysql> create table DemoTable(
Marks int
);
Chèn dữ liệu:
mysql> insert into DemoTable values(78); mysql> insert into DemoTable values(88); mysql> insert into DemoTable values(67); mysql> insert into DemoTable values(76); mysql> insert into DemoTable values(98); mysql> insert into DemoTable values(86); mysql> insert into DemoTable values(89); mysql> insert into DemoTable values(99);
Hiển thị dữ liệu:
mysql> select * from DemoTable;
Kết quả:
+-------+ | Marks | +-------+ | 78 | | 88 | | 67 | | 76 | | 98 | | 86 | | 89 | | 99 | +-------+
Truy vấn subquery lồng nhau lấy max thứ 2
mysql> select Marks from DemoTable
where Marks = (
select MAX(Marks) from DemoTable
where Marks < (select MAX(Marks) from DemoTable)
);
Kết quả:
+-------+ | Marks | +-------+ | 98 | +-------+
Giải thích:
- Subquery trong nhất:
SELECT MAX(Marks) FROM DemoTable→ 99 (lớn nhất) - Subquery giữa:
SELECT MAX(Marks) FROM DemoTable WHERE Marks < 99→ 98 (lớn nhất trong số còn lại) - Truy vấn chính: Lấy hàng có Marks = 98
Cách hiện đại hơn (MySQL 8.0+): Dùng window function ROW_NUMBER() OVER (ORDER BY Marks DESC) rồi lọc WHERE rn = 2. Cách này linh hoạt hơn cho top-N, phân trang, v.v.