Để đưa các bản ghi có giá trị cụ thể lên đầu danh sách, dùng biểu thức boolean trong ORDER BY: cot = 'gia_tri' DESC (TRUE=1 lên trước, FALSE=0 sau).
Cú pháp
SELECT * FROM ten_bang ORDER BY ten_cot = 'gia_tri_uu_tien' DESC, cot_id;
Ví dụ minh họa
Tạo bảng nhân viên có quốc gia:
mysql> CREATE TABLE SapXepUuTien (
-> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Ten VARCHAR(20),
-> QuocGia VARCHAR(15)
-> );
Chèn dữ liệu (3 người US, các quốc gia khác):
mysql> INSERT INTO SapXepUuTien(Ten, QuocGia) VALUES
-> ('Adam', 'US'), ('John', 'UK'), ('Bob', 'US'), ('Carol', 'Denmark'),
-> ('Sam', 'US'), ('David', 'France'), ('Maxwell', 'AUS'), ('Kevin', 'NewZealand');
Dữ liệu gốc:
+----+---------+-------------+ | Id | Ten | QuocGia | +----+---------+-------------+ | 1 | Adam | US | | 2 | John | UK | | 3 | Bob | US | | 4 | Carol | Denmark | | 5 | Sam | US | | 6 | David | France | | 7 | Maxwell | AUS | | 9 | Kevin | NewZealand | +----+---------+-------------+
Sắp xếp: Quốc gia 'US' lên đầu, sau đó theo Id
mysql> SELECT * FROM SapXepUuTien
-> ORDER BY QuocGia = 'US' DESC, Id;
Kết quả:
+----+---------+-------------+ | Id | Ten | QuocGia | +----+---------+-------------+ | 1 | Adam | US | | 3 | Bob | US | | 5 | Sam | US | | 2 | John | UK | | 4 | Carol | Denmark | | 6 | David | France | | 7 | Maxwell | AUS | | 9 | Kevin | NewZealand | +----+---------+-------------+
Mở rộng: Ưu tiên nhiều giá trị
ORDER BY
CASE QuocGia
WHEN 'US' THEN 1
WHEN 'UK' THEN 2
ELSE 3
END, Id;
Cách này cho phép định nghĩa thứ tự ưu tiên tùy ý cho nhiều giá trị.