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)
| Tiêu chí | Subquery MAX NOT IN | LIMIT OFFSET |
|---|---|---|
| Độ phức tạp | Cao (lồng 3 cấp) | Thấp (1 câu lệnh) |
| Hiệu năng | Chậm (scan nhiều lần) | Nhanh (index + filesort nhỏ) |
| Xử lý trùng lương | Trả về lương thứ 2 riêng biệt | Trả về 2 hàng (có thể cùng lương) |
| Lấy Top N | Khó mở rộng | Dễ dàng: LIMIT N |