কম্পিউটার টিউটোরিয়াল

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

সর্টিং ছাড়া ডেটা:

mysql> SELECT * FROM OrderByCaseDemo;
+----+---------+-------------+
| 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  |
+----+---------+-------------+
6 rows in set (0.00 sec)

GroupId=2 কে প্রথমে দেখাতে এবং তারপর ArrivalDate অনুযায়ী ASC সর্ট

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  |
+----+---------+-------------+
6 rows in set (0.00 sec)

ব্যাখ্যা: CASE স্টেটমেন্ট GroupId=2 কে ১ (সর্বোচ্চ প্রাধান্য) এবং বাকিগুলোকে ০ দিয়ে DESC সর্ট করেছে। ফলে GroupId=2 वाले রোগুলো উপরে এল, তারপর ArrivalDate ASC অনুযায়ী সাজানো হয়েছে।

  1. MySQL-এ কাস্টম অর্ডারিংয়ের জন্য ORDER BY CASE ব্যবহার করা

  2. MySQL-এ ORDER BY CASE WHEN দিয়ে করেন্ট ডেটের ভিত্তিতে দিন ও মাস অনুযায়ী সাজানো

  3. MySQL কোয়েরি: ডেট কলামকে NULL করা

  4. MySQL-এ ORDER BY Amount=0, Amount দিয়ে শূন্য মানগুলো শেষে পাঠানো