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

MySQL में ORDER BY से कॉलम सॉर्ट करें लेकिन खाली/NULL मान अंत में रखें

MySQL में कॉलम द्वारा सॉर्ट करते समय खाली स्ट्रिंग ('') और NULL मानों को अंतिम स्थान पर रखना

सिंटैक्स:

SELECT * FROM yourTableName 
ORDER BY IF(yourColumnName = '' OR yourColumnName IS NULL, 1, 0), yourColumnName;

कैसे काम करता है:

  • IF(condition, 1, 0): खाली/NULL के लिए 1, अन्यथा 0
  • ORDER BY पहले इस फ्लैग से सॉर्ट करता है: 0 (गैर-खाली) पहले, 1 (खाली/NULL) बाद में
  • फिर वास्तविक कॉलम मान से सॉर्ट करता है

व्यावहारिक उदाहरण

1. टेबल बनाएं:

mysql> CREATE TABLE emptyCellsAtEnd (ProductId VARCHAR(100)); 
Query OK, 0 rows affected (0.65 sec)

2. डेटा डालें (कुछ खाली):

mysql> INSERT INTO emptyCellsAtEnd VALUES('');
mysql> INSERT INTO emptyCellsAtEnd VALUES('P-1');
mysql> INSERT INTO emptyCellsAtEnd VALUES('P-2');
mysql> INSERT INTO emptyCellsAtEnd VALUES('');
mysql> INSERT INTO emptyCellsAtEnd VALUES('P-3');
mysql> INSERT INTO emptyCellsAtEnd VALUES('P-4');
mysql> INSERT INTO emptyCellsAtEnd VALUES('P-9');
mysql> INSERT INTO emptyCellsAtEnd VALUES('');
mysql> INSERT INTO emptyCellsAtEnd VALUES('P-8');

3. मूल क्रम:

+-----------+ 
| ProductId | 
+-----------+ 
|           |  ← खाली
| P-1       | 
| P-2       | 
|           |  ← खाली
| P-3       | 
| P-4       | 
| P-9       | 
|           |  ← खाली
| P-8       | 
+-----------+ 
9 rows in set (0.00 sec)

4. खाली/NULL को अंत में रखकर सॉर्ट करें:

mysql> SELECT * FROM emptyCellsAtEnd 
    -> ORDER BY IF(ProductId = '' OR ProductId IS NULL, 1, 0), ProductId;
+-----------+ 
| ProductId | 
+-----------+ 
| P-1       | 
| P-2       | 
| P-3       | 
| P-4       | 
| P-8       | 
| P-9       | 
|           |  ← खाली अंत में
|           | 
|           | 
+-----------+ 
9 rows in set (0.00 sec)

वैकल्पिक सिंटैक्स (अधिक पठनीय):

CASE स्टेटमेंट:

ORDER BY CASE 
    WHEN yourColumn IS NULL OR yourColumn = '' THEN 1 
    ELSE 0 
END, yourColumn

COALESCE/NULLIF ट्रिक:

ORDER BY (COALESCE(NULLIF(yourColumn, ''), '~') = '~'), yourColumn

'~' ऐसा कैरेक्टर है जो सामान्य डेटा में नहीं आता (ASCII में उच्च)।

MySQL 8.0+ NULLS LAST (केवल NULL के लिए):

ORDER BY yourColumn NULLS LAST

नोट: खाली स्ट्रिंग '' के लिए काम नहीं करता, केवल NULL के लिए।

सर्वोत्तम अभ्यास:

  • दोनों IS NULL और ='' जांचें (अगर दोनों संभव हैं)
  • इंडेक्स उपयोग के लिए: ORDER BY (col IS NULL), col इंडेक्स उपयोग कर सकता है
  • पैजिनेशन में लगातार परिणाम के लिए टाई-ब्रेकर जोड़ें: ORDER BY (col IS NULL), col, id
  1. - MySQL में तिथि कॉलम से पहली और अंतिम तिथि की तुलना करें

    TIME_TO_SEC, MIN, MAX के साथ समय अंतर गणना एक ही उपयोगकर्ता की पहली और अंतिम पोस्ट तिथि के बीच का समय अंतर निकालने के लिए TIME_TO_SEC, MIN, MAX, और SEC_TO_TIME का उपयोग करें। टेबल और डेटा CREATE TABLE DemoTable ( UserName VARCHAR(100), UserPostDatetime DATETIME ); Query OK, 0 rows affected

  1. - MySQL में कॉलम से डुप्लिकेट रिकॉर्ड की गिनती करें और परिणाम को क्रमबद्ध करें

    GROUP BY, COUNT(*), और ORDER BY का उपयोग करके डुप्लिकेट मानों की घटनाओं को गिनें और घटते क्रम में क्रमबद्ध करें। टेबल बनाना और डेटा डालना CREATE TABLE DemoTable (Number INT); INSERT INTO DemoTable VALUES(90),(100),(110),(90),(100), (90),(120),(100),(90),(120); सभी रिकॉर्ड देखना SELECT * FROM D

  1. - MySQL में शर्त के साथ ORDER BY और SELECT कैसे करें?

    कंडीशनल ORDER BY: जीरो वैल्यू अंत में किसी कॉलम को सॉर्ट करते समय खास मान (जैसे 0) को अंत में रखने और बाकी को नॉर्मल ऑर्डर में रखने के लिए बूलियन एक्सप्रेशन का उपयोग करें। सिंटैक्स SELECT * FROM yourTableName ORDER BY yourColumnName = 0, yourColumnName; टेबल बनाना और डेटा इन्सर्ट करना CREATE TABL