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

Tìm lương cao nhất và thứ 2 cao nhất trong MySQL (LIMIT OFFSET)

LIMIT ... OFFSET: Cách đơn giản lấy Top N lương cao nhất

Sắp xếp giảm dần theo lương, bỏ qua 0 hàng (OFFSET 0), lấy 2 hàng (LIMIT 2).

Cú pháp

SELECT cot1, cot2, ...
FROM tenBang
ORDER BY cotLuong DESC
LIMIT 2 OFFSET 0;

Ví dụ (cùng dữ liệu bài trước)

Bảng EmployeeMaxAndSecondMaxSalary 8 nhân viên.

Truy vấn:

SELECT EmployeeId, EmployeeName, EmployeeSalary
FROM EmployeeMaxAndSecondMaxSalary
ORDER BY EmployeeSalary DESC
LIMIT 2 OFFSET 0;

Kết quả

+------------+--------------+----------------+
| EmployeeId | EmployeeName | EmployeeSalary |
+------------+--------------+----------------+
|          6 | David        |          89990 |
|          8 | Robert       |          76543 |
+------------+--------------+----------------+

Giải thích

  • ORDER BY EmployeeSalary DESC: Lương cao nhất lên đầu.
  • LIMIT 2: Chỉ lấy 2 hàng đầu.
  • OFFSET 0: Bỏ qua 0 hàng (mặc định, có thể bỏ qua).

Phân trang (Pagination)

  • Trang 1 (top 2): LIMIT 2 OFFSET 0
  • Trang 2 (hạng 3-4): LIMIT 2 OFFSET 2
  • Trang k: LIMIT pageSize OFFSET (page-1)*pageSize

So sánh với Subquery (bài trước)

Khuyến nghị

Dùng LIMIT OFFSET cho hầu hết trường hợp. Dùng DISTINCT + LIMIT OFFSET nếu cần lương thứ 2 riêng biệt. Subquery chỉ khi logic phức tạp không thể dùng LIMIT.

Tiêu chíSubquery MAX NOT INLIMIT OFFSET
Độ phức tạpCao (lồng 3 cấp)Thấp (1 câu lệnh)
Hiệu năngChậm (scan nhiều lần)Nhanh (index + filesort nhỏ)
Xử lý trùng lươngTrả về lương thứ 2 riêng biệtTrả về 2 hàng (có thể cùng lương)
Lấy Top NKhó mở rộngDễ dàng: LIMIT N