Tìm giá trị lớn thứ n trong MySQL bằng ORDER BY + LIMIT OFFSET
Kỹ thuật phổ biến: sắp xếp giảm dần (ORDER BY DESC), bỏ qua n-1 giá trị đầu (OFFSET n-1), lấy 1 giá trị (LIMIT 1).
1. Tạo bảng và chèn dữ liệu
mysql> CREATE TABLE DemoTable (Value INT);
mysql> INSERT INTO DemoTable VALUES (100), (140), (90), (80), (89), (98), (58);
2. Xem dữ liệu
mysql> SELECT * FROM DemoTable;
+-------+ | Value | +-------+ | 100 | | 140 | | 90 | | 80 | | 89 | | 98 | | 58 | +-------+
3. Truy vấn: Giá trị lớn thứ 4 (OFFSET 3 = bỏ 3 giá trị lớn nhất)
mysql> SELECT Value FROM DemoTable
ORDER BY Value DESC
LIMIT 1 OFFSET 3;
4. Kết quả
+-------+ | Value | +-------+ | 90 | +-------+
Giải thích thứ tự sắp xếp giảm dần:
- 140 (lớn nhất)
- 100
- 98
- 90 ← OFFSET 3, LIMIT 1 lấy giá trị này
- 89
- 80
- 58
Công thức chung: Giá trị lớn thứ N → OFFSET N-1 LIMIT 1
- Lon nhất (1st):
OFFSET 0 LIMIT 1hoặcLIMIT 1 - Lớn thứ 2:
OFFSET 1 LIMIT 1 - Lớn thứ 3:
OFFSET 2 LIMIT 1
Lưu ý: Nếu có giá trị trùng lặp, cách này tính theo hàng (row), không phải giá trị distinct. Muốn distinct: SELECT DISTINCT Value ...
MySQL 8.0+ dùng hàm cửa sổ:
SELECT Value FROM (
SELECT Value, ROW_NUMBER() OVER (ORDER BY Value DESC) AS rn
FROM (SELECT DISTINCT Value FROM DemoTable) t
) x WHERE rn = 4;