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

Sắp xếp DESC ngoại trừ một giá trị đơn lẻ trong MySQL

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.