Sử dụng ORDER BY với DESC. Để đặt một giá trị cụ thể ở cuối (hoặc đầu), sử dụng biểu thức boolean.
Tạo bảng demo
mysql> create table DemoTable (
-> Name varchar(100)
-> );
Query OK, 0 rows affected (0.89 sec)
Chèn dữ liệu
mysql> insert into DemoTable values('Sam');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('Chris');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values('John');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('Carol');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values('Adam');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('David');
Query OK, 1 row affected (0.12 sec)
Hiển thị dữ liệu gốc
mysql> select * from DemoTable;
Kết quả
+-------+ | Name | +-------+ | Sam | | Chris | | John | | Carol | | Adam | | David | +-------+ 6 rows in set (0.00 sec)
Sắp xếp DESC nhưng "Adam" luôn ở cuối
mysql> select * from DemoTable ORDER BY (Name <> 'Adam') DESC, Name;
Kết quả - Adam ở cuối, các tên khác sắp xếp Z-A
+-------+ | Name | +-------+ | Carol | | Chris | | David | | John | | Sam | | Adam | +-------+ 6 rows in set (0.00 sec)
Giải thích:
(Name <> 'Adam'): Biểu thức boolean, trả về 1 (TRUE) nếu không phải Adam, 0 (FALSE) nếu là Adam.DESC: Sắp xếp 1 trước, 0 sau → Các tên khác lên trước, Adam xuống cuối., Name: Phụ thuộc thứ hai, sắp xếp A-Z trong nhóm không phải Adam.
Để đưa giá trị đặc biệt lên ĐẦU: ORDER BY (Name = 'Adam') DESC, Name (TRUE=1 lên trước).
Mở rộng cho nhiều giá trị ngoại lệ: ORDER BY FIELD(Name, 'Adam', 'Eve') DESC, Name hoặc CASE WHEN Name IN ('Adam','Eve') THEN 0 ELSE 1 END DESC.