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

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

MySQL में विशिष्ट मान को शीर्ष पर रखकर कस्टम ऑर्डरिंग

MySQL में आप बूलियन अभिव्यक्ति (Column = Value) DESC का उपयोग करके एक विशिष्ट मान को शीर्ष पर रख सकते हैं, उसके बाद शेष मानों को आरोही (या अवरोही) क्रम में रख सकते हैं।

टेबल बनाना

mysql> CREATE TABLE DemoTable (
    -> MonthNumber INT
    -> );
Query OK, 0 rows affected (1.68 sec)

डेटा डालना

mysql> INSERT INTO DemoTable VALUES (10);
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO DemoTable VALUES (1);
Query OK, 1 row affected (0.11 sec)
mysql> INSERT INTO DemoTable VALUES (9);
Query OK, 1 row affected (0.09 sec)
mysql> INSERT INTO DemoTable VALUES (6);
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO DemoTable VALUES (8);
Query OK, 1 row affected (0.09 sec)
mysql> INSERT INTO DemoTable VALUES (5);
Query OK, 1 row affected (0.11 sec)

मूल डेटा (सम्मिलन क्रम)

mysql> SELECT * FROM DemoTable;
+-------------+
| MonthNumber |
+-------------+
|          10 |
|           1 |
|           9 |
|           6 |
|           8 |
|           5 |
+-------------+
6 rows in set (0.00 sec)

MonthNumber=5 को शीर्ष पर रखने का क्वेरी, बाकी आरोही क्रम में

mysql> SELECT * FROM DemoTable 
    -> ORDER BY MonthNumber = 5 DESC, MonthNumber ASC;

परिणाम

+-------------+
| MonthNumber |
+-------------+
|           5 |
|           1 |
|           6 |
|           8 |
|           9 |
|          10 |
+-------------+
6 rows in set (0.00 sec)

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

  • MonthNumber = 5 बूलियन अभिव्यक्ति है: 5 के लिए TRUE (1), अन्य के लिए FALSE (0)
  • DESC: TRUE (1) पहले आता है, फिर FALSE (0)
  • MonthNumber ASC: FALSE समूह के भीतर, आरोही क्रम में क्रमबद्ध

समतुल्य CASE WHEN सिंटैक्स (अधिक स्पष्ट)

SELECT * FROM DemoTable
ORDER BY CASE WHEN MonthNumber = 5 THEN 0 ELSE 1 END, MonthNumber;

FIELD() फ़ंक्शन का उपयोग (एकाधिक प्राथमिकता मानों के लिए)

-- 5 पहले, फिर 1, फिर बाकी आरोही
SELECT * FROM DemoTable
ORDER BY FIELD(MonthNumber, 5, 1) DESC, MonthNumber ASC;

FIELD() सूची में मान की 1-आधारित स्थिति लौटाता है (नहीं मिलने पर 0)।

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

विशिष्ट स्थिति कोड प्राथमिकता

SELECT * FROM Orders
ORDER BY FIELD(Status, 'URGENT', 'HIGH', 'NORMAL', 'LOW') DESC, CreatedAt;

विशिष्ट उपयोगकर्ता प्रकार पहले

SELECT * FROM Users
ORDER BY (UserType = 'ADMIN') DESC, (UserType = 'PREMIUM') DESC, UserName;

डिफ़ॉल्ट/फॉलबैक मान अंत में

SELECT * FROM Settings
ORDER BY (SettingName = 'DEFAULT') ASC, SettingName;  -- DEFAULT अंत में

प्रदर्शन नोट

  • बूलियन अभिव्यक्ति इंडेक्स का उपयोग नहीं कर सकती
  • बड़े टेबल्स के लिए, एक सॉर्ट_ऑर्डर कॉलम जोड़ने पर विचार करें
  • यदि संभव हो तो WHERE के साथ संयुक्त परिणाम सेट को पहले फ़िल्टर करें

अवरोही क्रम के लिए शेष मान

-- 5 पहले, फिर बाकी अवरोही
SELECT * FROM DemoTable
ORDER BY (MonthNumber = 5) DESC, MonthNumber DESC;

एकाधिक विशिष्ट मान (प्राथमिकता क्रम में)

SELECT * FROM DemoTable
ORDER BY 
    (MonthNumber = 5) DESC,
    (MonthNumber = 1) DESC,
    MonthNumber ASC;
  1. - MySQL में NULL और NOT NULL रिकॉर्ड वाले कॉलम से केवल NOT NULL मान प्रदर्शित करें

    इसके लिए आप IS NOT NULL प्रॉपर्टी का उपयोग कर सकते हैं। आइए पहले एक टेबल बनाते हैं: mysql> create table DemoTable1 ( DueDate date ); Query OK, 0 rows affected (0.00 sec) इन्सर्ट कमांड का उपयोग करके टेबल में कुछ रिकॉर्ड डालें: mysql> insert into DemoTable1 values(2019-09-10); Query OK, 1 r

  1. - MySQL में GROUP BY HAVING से डुप्लिकेट कॉलम मान खोजें और प्रदर्शित करें

    किसी कॉलम में डुप्लिकेट मान (एक से अधिक बार आने वाले) खोजने के लिए GROUP BY और 1 का उपयोग करें। टेबल बनाएं mysql> CREATE TABLE DemoTable1858 (ModelNumber VARCHAR(50)); डेटा डालें mysql> INSERT INTO DemoTable1858 VALUES(Audi A4), (Audi A6), (Audi A4), (Audi Q5), (Audi R8), (Audi Q5); डुप्लि

  1. - MySQL में विशिष्ट मान को फिक्स करके बाकी पंक्तियाँ रैंडम क्रम में कैसे दिखाएं?

    MySQL में किसी विशिष्ट मान वाली पंक्ति को शीर्ष पर फिक्स करके, शेष पंक्तियों को रैंडम क्रम में प्रदर्शित करने के लिए, ORDER BY में बूलियन एक्सप्रेशन और RAND() का संयोजन उपयोग करें। उदाहरण: मान 40 को शीर्ष पर रखें, बाकी रैंडम डेमो टेबल बनाएं: mysql> CREATE TABLE DemoTable1921 (Number INT); डेट