Sử dụng ORDER BY IF(condition, 1, 0) DESC để ưu tiên hiển thị các hàng thỏa mãn điều kiện lên đầu.
Ví dụ
Tạo bảng sinh viên có cột Branch (ngành):
mysql> create table DemoTable (
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
FirstName varchar(20),
Branch varchar(20)
);
Query OK, 0 rows affected (1.96 sec)Dữ liệu 7 hàng (3 hàng Branch='ME'):
+----+-----------+--------+ | Id | FirstName | Branch | +----+-----------+--------+ | 1 | John | CS | | 2 | Carol | ME | | 3 | David | ME | | 4 | Bob | CE | | 5 | Robert | EE | | 6 | Chris | EEE | | 7 | James | ME | +----+-----------+--------+
Sắp xếp ưu tiên Branch='ME' lên đầu
mysql> select *from DemoTable order by if(Branch='ME',1,0) DESC, Branch;
+----+-----------+--------+ | Id | FirstName | Branch | +----+-----------+--------+ | 2 | Carol | ME | | 3 | David | ME | | 7 | James | ME | | 4 | Bob | CE | | 1 | John | CS | | 5 | Robert | EE | | 6 | Chris | EEE | +----+-----------+--------+
Giải thích: IF(Branch='ME',1,0) trả về 1 cho ME, 0 cho khác. DESC đưa 1 lên đầu. Cột Branch thứ hai sắp xếp alphabet cho các nhóm còn lại.
Mở rộng: Dùng CASE WHEN Branch='ME' THEN 1 WHEN Branch='CS' THEN 2 ELSE 3 END cho nhiều mức ưu tiên.