MySQL में ORDER BY CASE के साथ कस्टम सॉर्टिंग
आप ORDER BY CASE स्टेटमेंट का उपयोग करके पूर्णांक कॉलम के लिए कस्टम क्रम और दिनांक कॉलम के लिए सामान्य क्रम निर्दिष्ट कर सकते हैं।
सिंटैक्स
SELECT * FROM yourTableName ORDER BY CASE yourIntegerColumnName WHEN 2 THEN 1 ELSE 0 END DESC, yourDateColumnName ASC;
उदाहरण
टेबल बनाएं:
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');
कस्टम क्रम: GroupId=2 पहले, फिर बाकी, और ArrivalDate आरोही क्रम में:
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 | +----+---------+-------------+
व्याख्या
CASE GroupId WHEN 2 THEN 1 ELSE 0 END: GroupId=2 के लिए 1, बाकी के लिए 0DESC: 1 पहले आता है (यानी GroupId=2 पहले)ArrivalDate ASC: समान GroupId के लिए दिनांक के अनुसार आरोही क्रम