Để sắp xếp dữ liệu theo một thứ tự cụ thể (không phải alphabet hay số tăng/giảm), bạn có thể sử dụng ORDER BY kết hợp với hàm IF().
Cú pháp
SELECT * FROM yourTableName
ORDER BY IF(yourColumnName = yourValue1 OR yourColumnName = yourValue2 OR yourColumnName = yourValue3,
yourColumnName, ~yourColumnName) ASC;
Ví dụ minh họa
Tạo bảng và chèn dữ liệu:
CREATE TABLE arrangeDataInSpecificOrder (
StudentId INT,
StudentName VARCHAR(20)
);
INSERT INTO arrangeDataInSpecificOrder VALUES (10, 'Larry');
INSERT INTO arrangeDataInSpecificOrder VALUES (15, 'Mike');
INSERT INTO arrangeDataInSpecificOrder VALUES (100, 'Sam');
INSERT INTO arrangeDataInSpecificOrder VALUES (70, 'Carol');
INSERT INTO arrangeDataInSpecificOrder VALUES (90, 'Bob');
INSERT INTO arrangeDataInSpecificOrder VALUES (300, 'David');
Dữ liệu gốc:
+-----------+-------------+ | StudentId | StudentName | +-----------+-------------+ | 10 | Larry | | 15 | Mike | | 100 | Sam | | 70 | Carol | | 90 | Bob | | 300 | David | +-----------+-------------+
Yêu cầu: Sắp xếp so that các ID 10, 100, 300 xuất hiện trước (theo thứ tự tăng dần), các ID còn lại sau đó.
SELECT * FROM arrangeDataInSpecificOrder
ORDER BY IF(StudentId = 300 OR StudentId = 100 OR StudentId = 10,
StudentId, ~StudentId) ASC;
Kết quả:
+-----------+-------------+ | StudentId | StudentName | +-----------+-------------+ | 10 | Larry | | 100 | Sam | | 300 | David | | 90 | Bob | | 70 | Carol | | 15 | Mike | +-----------+-------------+
Lưu ý: Toán tử ~ (bitwise NOT) giúp đảo ngược thứ tự cho các giá trị không nằm trong danh sách ưu tiên. Cách này linh hoạt cho các yêu cầu sắp xếp phức tạp.