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

MySQL ORDER BY theo cột ngày và cột số với quy tắc tùy chỉnh

Để sắp xếp theo cột ngày và cột số với quy tắc tùy chỉnh cho cột số, sử dụng ORDER BY CASE.

Cú pháp

SELECT * FROM ten_bang 
ORDER BY CASE ten_cot_so WHEN gia_tri_uu_tien THEN 1 ELSE 0 END DESC, ten_cot_ngay ASC;

Ví dụ minh họa

Tạo bảng đơn hàng với GroupId và ArrivalDate:

mysql> CREATE TABLE OrderByCaseDemo (
    -> Id INT NOT NULL AUTO_INCREMENT,
    -> GroupId INT,
    -> ArrivalDate DATE,
    -> PRIMARY KEY(Id)
    -> );

mysql> INSERT INTO OrderByCaseDemo(GroupId, ArrivalDate) VALUES(2, '2019-02-06');
mysql> INSERT INTO OrderByCaseDemo(GroupId, ArrivalDate) VALUES(1, '2020-02-06');
mysql> INSERT INTO OrderByCaseDemo(GroupId, ArrivalDate) VALUES(3, '2018-02-06');
mysql> INSERT INTO OrderByCaseDemo(GroupId, ArrivalDate) VALUES(3, '2021-02-06');
mysql> INSERT INTO OrderByCaseDemo(GroupId, ArrivalDate) VALUES(2, '2017-02-06');
mysql> INSERT INTO OrderByCaseDemo(GroupId, ArrivalDate) VALUES(1, '2022-02-06');

Dữ liệu gốc:

+----+---------+-------------+
| Id | GroupId | ArrivalDate |
+----+---------+-------------+
|  1 |       2 | 2019-02-06  |
|  2 |       1 | 2020-02-06  |
|  3 |       3 | 2018-02-06  |
|  4 |       3 | 2021-02-06  |
|  5 |       2 | 2017-02-06  |
|  6 |       1 | 2022-02-06  |
+----+---------+-------------+

Sắp xếp: GroupId=2 lên đầu, sau đó theo ArrivalDate tăng dần:

mysql> SELECT * FROM OrderByCaseDemo 
    -> ORDER BY CASE GroupId WHEN 2 THEN 1 ELSE 0 END DESC, ArrivalDate ASC;

Kết quả:

+----+---------+-------------+
| Id | GroupId | ArrivalDate |
+----+---------+-------------+
|  5 |       2 | 2017-02-06  |
|  1 |       2 | 2019-02-06  |
|  3 |       3 | 2018-02-06  |
|  2 |       1 | 2020-02-06  |
|  4 |       3 | 2021-02-06  |
|  6 |       1 | 2022-02-06  |
+----+---------+-------------+

Nhóm GroupId=2 xuất hiện trước (sắp xếp theo ngày tăng), tiếp theo GroupId=3 và 1.