Sắp xếp tùy chỉnh: Ưu tiên một giá trị cụ thể, phần còn lại tăng dần
Kỹ thuật: ORDER BY (cot = gia_tri) DESC, cot ASC. Biểu thức logic trả về 1 (true) hoặc 0 (false), sắp xếp DESC đưa true lên đầu.
Tạo bảng và dữ liệu
mysql> create table DemoTable ( MonthNumber int ); Query OK, 0 rows affected (1.68 sec)
mysql> insert into DemoTable values(10); mysql> insert into DemoTable values(1); mysql> insert into DemoTable values(9); mysql> insert into DemoTable values(6); mysql> insert into DemoTable values(8); mysql> insert into DemoTable values(5);
Dữ liệu gốc
+-------------+ | MonthNumber | +-------------+ | 10 | | 1 | | 9 | | 6 | | 8 | | 5 | +-------------+
Truy vấn: Đưa 5 lên đầu, phần còn lại tăng dần
mysql> select * from DemoTable
-> order by MonthNumber=5 desc, MonthNumber asc;
Kết quả
+-------------+ | MonthNumber | +-------------+ | 5 | | 1 | | 6 | | 8 | | 9 | | 10 | +-------------+
Giải thích:
MonthNumber=5trả về 1 cho hàng có giá trị 5, 0 cho các hàng khácDESCsắp xếp 1 trước 0 → hàng 5 lên đầuMonthNumber ASCsắp xếp tăng dần cho phần còn lại
Mở rộng: Để ưu tiên nhiều giá trị: ORDER BY FIELD(MonthNumber, 5, 1, 6), MonthNumber hoặc ORDER BY CASE WHEN MonthNumber IN (5,1) THEN 0 ELSE 1 END, MonthNumber.