ফলাফলে নির্দিষ্ট একটি মান (যেমন `UserName = 'David'`) সবচেয়ে উপরে রাখে, বাকি সারিগুলো অন্য একটি কলাম (যেমন `ShippingDate`) অনুযায়ী সর্ট করতে ORDER BY (condition) DESC, column প্যাটার্ন ব্যবহার করা হয়।
টেবিল ও ডেটা তৈরি
mysql> CREATE TABLE DemoTable1932 (
UserName VARCHAR(20),
ShippingDate DATE
);
mysql> INSERT INTO DemoTable1932 VALUES
('Chris', '2018-10-12'),
('David', '2019-04-11'),
('Mike', '2016-12-04'),
('Carol', '2017-12-26');
ডেটা যাচাই
mysql> SELECT * FROM DemoTable1932;
+----------+--------------+ | UserName | ShippingDate | +----------+--------------+ | Chris | 2018-10-12 | | David | 2019-04-11 | | Mike | 2016-12-04 | | Carol | 2017-12-26 | +----------+--------------+
কোয়েরি: David প্রথমে, বাকি ShippingDate ASC
mysql> SELECT * FROM DemoTable1932
ORDER BY UserName = 'David' DESC, ShippingDate;
ব্যাখ্যা:
UserName = 'David'— বুলিয়ান এক্সপ্রেশন, David হলে ১ (TRUE), অন্যদের ০ (FALSE)।DESC— ১ (TRUE) আগে আসে, তাই David উপরে।ShippingDate— বাকি সারিগুলো এই কলাম অনুযায়ী আরোহী ক্রমে।
আউটপুট:
+----------+--------------+ | UserName | ShippingDate | +----------+--------------+ | David | 2019-04-11 | | Mike | 2016-12-04 | | Carol | 2017-12-26 | | Chris | 2018-10-12 | +----------+--------------+
বিকল্প: CASE WHEN (আরও স্পষ্ট)
ORDER BY CASE WHEN UserName = 'David' THEN 0 ELSE 1 END, ShippingDate;
বহুমান বর্জন (Multiple Priority)
ORDER BY CASE UserName
WHEN 'David' THEN 1
WHEN 'Chris' THEN 2
ELSE 3
END, ShippingDate;
পারফরম্যান্স নোট
ORDER BY (col = 'val') DESC এক্সপ্রেশন ইন্ডেক্স ব্যবহার করতে পারে না। বড় টেবিলে এটি স্লো হতে পারে। সমাধান: প্রায়ورিটি কলাম যোগ করে সেটিতে ইন্ডেক্স দিন।