Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL में ORDER BY ASC के साथ NULL मानों को नीचे कैसे दिखाएं?

MySQL में ORDER BY ASC डिफ़ॉल्ट रूप से NULL मानों को पहले रखता है। NULL मानों को अंत में (नीचे) रखते हुए आरोही क्रम बनाए रखने के लिए, CASE स्टेटमेंट या IS NULL चेक के साथ कस्टम सॉर्टिंग लागू करें।

उदाहरण: NULL और खाली स्ट्रिंग को नीचे रखें

डेमो टेबल बनाएं:

mysql> CREATE TABLE DemoTable1937 (Name VARCHAR(20));

डेटा इन्सर्ट करें (NULL और खाली स्ट्रिंग सहित):

mysql> INSERT INTO DemoTable1937 VALUES
('Chris'), (NULL), ('Adam'), ('John'), (''), (NULL), ('Bob');

डिफ़ॉल्ट ASC (NULL पहले):

+-------+
| Name  |
+-------+
| NULL  |
| NULL  |
|       |
| Adam  |
| Bob   |
| Chris |
| John  |
+-------+

CASE के साथ कस्टम ऑर्डर (NULL/खाली नीचे):

mysql> SELECT * FROM DemoTable1937
ORDER BY 
    CASE 
        WHEN Name IS NULL THEN 100
        WHEN Name = '' THEN 101
        ELSE 103
    END DESC,
    Name ASC;

आउटपुट (मान ASC, फिर खाली, फिर NULL):

+-------+
| Name  |
+-------+
| Adam  |
| Bob   |
| Chris |
| John  |
|       |
| NULL  |
| NULL  |
+-------+

व्याख्या

  1. CASE प्रत्येक पंक्ति को सॉर्ट प्राथमिकता देता है:
    • वैध नाम → 103 (उच्चतम)
    • खाली स्ट्रिंग → 101
    • NULL → 100 (निम्नतम)
  2. DESC: उच्च प्राथमिकता पहले (103 > 101 > 100)
  3. Name ASC: समान प्राथमिकता वाले समूह के भीतर वर्णानुक्रम

सरल विकल्प: IS NULL सॉर्टिंग

-- केवल NULL अंत में
ORDER BY Name IS NULL, Name ASC

-- NULL और खाली दोनों अंत में
ORDER BY (Name IS NULL OR Name = ''), Name ASC

MySQL में TRUE=1, FALSE=0, इसलिए IS NULL (1) बाद में आता है ASC में।

MySQL 8.0+ NULLS FIRST/LAST (समर्थित नहीं)

PostgreSQL/Oracle: ORDER BY Name ASC NULLS LAST

MySQL: उपरोक्त CASE/बूलियन ट्रिक उपयोग करें।

इंडेक्स विचार

  • ORDER BY Name इंडेक्स उपयोग कर सकता है
  • ORDER BY CASE... आमतौर पर फाइलसॉर्ट मजबूर करता है
  • बड़े टेबल्स के लिए, Name पर इंडेक्स + एप्लिकेशन लेयर सॉर्टिंग पर विचार करें

सामान्य पैटर्न

-- संख्यात्मक: 0/NULL अंत में
ORDER BY (col IS NULL OR col = 0), col ASC

-- तारीख: भविष्य/NULL अंत में
ORDER BY (dt IS NULL OR dt > CURDATE()), dt ASC

कस्टम NULL सॉर्टिंग रिपोर्टिंग और UI डिस्प्ले के लिए आवश्यक है जहां NULL का अर्थ "अज्ञात/लागू नहीं" होता है।

  1. - MySQL में एक फ़ील्ड द्वारा ऑर्डर करें और बाकी रिकॉर्ड्स को उसी क्रम में प्रदर्शित करें

    MySQL में विशिष्ट रिकॉर्ड को प्राथमिकता देकर ऑर्डर करना कभी-कभी आप एक विशिष्ट रिकॉर्ड को शीर्ष पर रखना चाहते हैं जबकि बाकी रिकॉर्ड्स अपने मूल क्रम में रहें। MySQL में बूलियन अभिव्यक्ति (Id = 101) का उपयोग करके ORDER BY में यह प्राप्त किया जा सकता है। टेबल बनाना ); Query OK, 0 rows affected (0.82 s

  1. - MySQL में विशिष्ट कॉलम मान को प्राथमिकता देकर ऑर्डर करें और बाकी को आरोही क्रम में दिखाएं

    MySQL में विशिष्ट मान को शीर्ष पर रखकर कस्टम ऑर्डरिंग MySQL में आप बूलियन अभिव्यक्ति (Column = Value) DESC का उपयोग करके एक विशिष्ट मान को शीर्ष पर रख सकते हैं, उसके बाद शेष मानों को आरोही (या अवरोही) क्रम में रख सकते हैं। टेबल बनाना ); Query OK, 0 rows affected (1.68 sec) डेटा डालना INSERT INTO

  1. - MySQL क्वेरी डुप्लिकेट टुपल्स खोजने और गिनती प्रदर्शित करने के लिए?

    डुप्लिकेट टुपल्स खोजने के लिए GROUP BY HAVING क्लॉज का उपयोग करें। आइए पहले एक टेबल बनाते हैं: mysql> create table DemoTable -> ( -> Id int, -> Name varchar(20) -> ); Query OK, 0 rows affected (0.80 sec) इन्सर्ट कमांड का उपयोग करके टेबल में कुछ रिकॉर्ड डालें: mysql> insert into De