Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Sắp xếp tùy chỉnh thứ tự bản ghi trong MySQL (ORDER BY IF)

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.