ডিফল্টভাবে MySQL-এ ORDER BY col ASC করলে NULL মানগুলো **সর্বশেষে** আসে (নন-নাল মানগুলো আগে) — কিন্তু কিছু ডেটাবیس (PostgreSQL, SQL Server) এ NULL প্রথমে আসে। নিশ্চিতভাবে NULL শেষে রাখতে CASE WHEN ব্যবহার করা হয়।
টেবিল ও ডেটা তৈরি
mysql> CREATE TABLE DemoTable1937 (Name VARCHAR(20));
mysql> INSERT INTO DemoTable1937 VALUES
('Chris'), (NULL), ('Adam'), ('John'), (''), (NULL), ('Bob');
ডিফল্ট সর্ট (MySQL-এ NULL লাস্ট)
mysql> SELECT * FROM DemoTable1937 ORDER BY Name ASC;
+-------+ | Name | +-------+ | Adam | | Bob | | Chris | | John | | | -- খালি স্ট্রিং | NULL | | NULL | +-------+
CASE WHEN দিয়ে NULL এবং খালি স্ট্রিং শেষে রাখা
mysql> SELECT * FROM DemoTable1937
ORDER BY
CASE
WHEN Name IS NULL THEN 100
WHEN Name = '' THEN 101
ELSE 103
END DESC,
Name ASC;
ব্যাখ্যা:
CASE WHEN Name IS NULL THEN 100— NULL কে ১০০ দেয়া হয়েছে।WHEN Name = '' THEN 101— খালি স্ট্রিং কে ১০১।ELSE 103— বাকিগুলো ১০৩।DESC— বড় মান (১০৩) আগে আসে, তারপর ১০১, ১০০। তাই নন-নাল মানগুলো আগে, তারপর খালি স্ট্রিং, সবশেষে NULL।Name ASC— একই গ্রুপের ভিতরে বর্ণানুক্রম।
আউটপুট:
+-------+ | Name | +-------+ | Adam | | Bob | | Chris | | John | | | | NULL | | NULL | +-------+
সরলীকৃত সংস্করণ (MySQL ডিফল্ট আচরণই NULL লাস্ট)
ORDER BY Name IS NULL, Name = '', Name;
Name IS NULL— TRUE (১) হলে শেষে, FALSE (০) হলে আগে।Name = ''— খালি স্ট্রিং TRUE হলে NULL-এর পরেও পরে।
স্ট্যান্ডার্ড SQL (NULLS LAST) — MySQL 8.0.2+ এ সমর্থিত নয়
ORDER BY Name ASC NULLS LAST; -- PostgreSQL, Oracle, SQL Server 2022+ এ কাজ করে