একই কলামে নির্দিষ্ট মান (যেমন ৯৯) প্রথমে দেখানোর জন্য ORDER BY IF(condition, 1, 0), column ব্যবহার করা হয়। এটি কাস্টম সর্টিং অর্ডার তৈরি করে।
টেবিল তৈরি ও ডেটা ইনসার্ট
mysql> CREATE TABLE DemoTable801 (Score INT); Query OK, 0 rows affected (0.69 sec)
mysql> INSERT INTO DemoTable801 VALUES (30); Query OK, 1 row affected (0.19 sec) mysql> INSERT INTO DemoTable801 VALUES (99); Query OK, 1 row affected (0.16 sec) mysql> INSERT INTO DemoTable801 VALUES (45); Query OK, 1 row affected (0.16 sec) mysql> INSERT INTO DemoTable801 VALUES (55); Query OK, 1 row affected (0.16 sec) mysql> INSERT INTO DemoTable801 VALUES (99); Query OK, 1 row affected (0.19 sec) mysql> INSERT INTO DemoTable801 VALUES (69); Query OK, 1 row affected (0.13 sec) mysql> INSERT INTO DemoTable801 VALUES (25); Query OK, 1 row affected (0.20 sec) mysql> INSERT INTO DemoTable801 VALUES (79); Query OK, 1 row affected (0.12 sec)
রেকর্ড দেখানো
mysql> SELECT * FROM DemoTable801;
আউটপুট:
+-------+ | Score | +-------+ | 30 | | 99 | | 45 | | 55 | | 99 | | 69 | | 25 | | 79 | +-------+ 8 rows in set (0.00 sec)
৯৯ মানগুলোকে প্রথমে আনে বাকি আসেন্ডিং সর্ট
mysql> SELECT * FROM DemoTable801 ORDER BY IF(Score = 99, 1, 0), Score;
ফলাফল (৯৯গুলো আগে, তারপর বাকি আসেন্ডিং):
+-------+ | Score | +-------+ | 25 | | 30 | | 45 | | 55 | | 69 | | 79 | | 99 | | 99 | +-------+ 8 rows in set (0.00 sec)
ব্যাখ্যা
IF(Score = 99, 1, 0)- স্কোর ৯৯ হলে ১, অন্যথায় ০ রিটার্ন করে।ORDER BY ..., Score- প্রথমে IF-এর ফলাফল (১ আগে আসে), তারপর Score আসেন্ডিং।- একই IF ফলাফলের মধ্যে Score অনুযায়ী সর্ট হয়।
বিকল্প: CASE WHEN
ORDER BY CASE WHEN Score = 99 THEN 0 ELSE 1 END, Score
এখানে ০ আগে আসে, তাই ৯৯वाले আগে আসবে। একাধিক প্রায়োরিটি লেভেলের জন্য CASE ভালো।