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

MySQL-এ ORDER BY ASC করার সময় NULL মানগুলো শেষে রাখা (CASE WHEN)

ডিফল্টভাবে 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+ এ কাজ করে
  1. MySQL-এ ডুপ্লিকেট আইডির গড় বের করে সর্বোচ্চ গড়見せ वाले আইডি খুঁজে বের করা (HAVING AVG)

  2. MySQL-এ একক ফিল্ড দ্বারা অর্ডার করে বাকি রেকর্ডগুলো একই ক্রমে দেখানো

  3. MySQL-এ নির্দিষ্ট ভ্যালু প্রথমে দেখিয়ে বাকি অর্ডার করানো (ORDER BY ট্রিক)

  4. MySQL에서 중복 튜플 찾기와 개수 세기 (GROUP BY HAVING)