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

MySQL: Sắp xếp ưu tiên giá trị cụ thể lên đầu (ORDER BY ... = 'gia_tri' DESC)

Để đư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ị.