Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

MySQL ORDER BY คอลัมน์วันที่และตัวเลข พร้อมกำหนดลำดับเฉพาะของตัวเลข

ใช้ ORDER BY CASE เพื่อกำหนดลำดับความสำคัญของคอลัมน์ตัวเลข แล้วค่อยเรียงวันที่

ไวยากรณ์

SELECT * FROM yourTableName 
ORDER BY CASE yourIntegerColumn WHEN 2 THEN 1 ELSE 0 END DESC, yourDateColumn ASC;

ตัวอย่างการใช้งาน

สร้างตาราง:

mysql> create table OrderByCaseDemo (
    -> Id int NOT NULL AUTO_INCREMENT,
    -> GroupId int,
    -> ArrivalDate date,
    -> PRIMARY KEY(Id)
    -> );
Query OK, 0 rows affected (1.57 sec)

เพิ่มข้อมูล:

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');

ข้อมูลเดิม:

+----+---------+-------------+
| 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  |
+----+---------+-------------+

เรียง GroupId=2 ก่อน (THEN 1), อื่นๆ ทีหลัง (ELSE 0), แล้วเรียงวันที่น้อยไปมาก:

mysql> select * from OrderByCaseDemo 
    -> order by case GroupId when 2 then 1 else 0 end desc, ArrivalDate asc;

ผลลัพธ์:

+----+---------+-------------+
| 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  |
+----+---------+-------------+

GroupId=2 อยู่บนสุด เรียงวันที่น้อยไปมาก ตามด้วย GroupId อื่นๆ