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

Truy vấn MySQL lấy giá trị lớn thứ n (nth highest) với LIMIT OFFSET

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:

  1. 140 (lớn nhất)
  2. 100
  3. 98
  4. 90 ← OFFSET 3, LIMIT 1 lấy giá trị này
  5. 89
  6. 80
  7. 58

Công thức chung: Giá trị lớn thứ N → OFFSET N-1 LIMIT 1

  • Lon nhất (1st): OFFSET 0 LIMIT 1 hoặc LIMIT 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;