Để lấy N bản ghi theo thứ tự này, rồi sắp xếp lại theo thứ tự khác, dùng subquery: SELECT ... FROM (SELECT ... ORDER BY ... LIMIT N) AS t ORDER BY ....
Cú pháp
SELECT * FROM (
SELECT * FROM ten_bang ORDER BY cot_1 DESC LIMIT n
) AS bang_tam
ORDER BY cot_2;
Ví dụ minh họa
Tạo bảng 9 người dùng:
mysql> CREATE TABLE SapXepSauLimit (
-> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Ten VARCHAR(20),
-> Tuoi INT
-> );
Chèn dữ liệu (tuổi khác nhau):
mysql> INSERT INTO SapXepSauLimit(Ten, Tuoi) VALUES
-> ('John', 23), ('Larry', 21), ('Bob', 26), ('James', 22),
-> ('Robert', 28), ('Mike', 29), ('Carol', 24), ('David', 20), ('Maxwell', 30);
Bước 1: Lấy 9 người tuổi cao nhất (DESC)
mysql> SELECT * FROM SapXepSauLimit ORDER BY Tuoi DESC LIMIT 9;
→ Trả về 9 người từ tuổi 30 xuống 20.
Bước 2: Sắp xếp lại kết quả đó theo tên (ASC)
mysql> SELECT * FROM (
-> SELECT * FROM SapXepSauLimit ORDER BY Tuoi DESC LIMIT 9
-> ) AS tbl1
-> ORDER BY Ten;
Kết quả cuối (9 người, sắp xếp A-Z):
+----+----------+------+ | Id | Ten | Tuoi | +----+----------+------+ | 3 | Bob | 26 | | 7 | Carol | 24 | | 8 | David | 20 | | 4 | James | 22 | | 1 | John | 23 | | 2 | Larry | 21 | | 9 | Maxwell | 30 | | 6 | Mike | 29 | | 5 | Robert | 28 | +----+----------+------+
Ứng dụng: Phân trang kết quả "Top N" nhưng hiển thị theo alphabet. MySQL 8.0+ có thể dùng WITH (CTE) cho rõ ràng hơn.