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

PostgreSQL में MySQL के ORDER BY FIELD() का अनुकरण कैसे करें?

MySQL का ORDER BY FIELD(col, 'val1', 'val2', ...) कस्टम क्रम में सॉर्ट करता है। PostgreSQL में CASE एक्सप्रेशन या ARRAY पोजीशन से समान परिणाम प्राप्त कर सकते हैं।

उदाहरण डेटा

CREATE TABLE country_demo (country_name VARCHAR(10));
INSERT INTO country_demo VALUES ('IND'), ('US'), ('UK'), ('IND'), ('US');

विधि 1: CASE एक्सप्रेशन (सभी संस्करण)

SELECT * FROM country_demo
ORDER BY 
    CASE country_name
        WHEN 'IND' THEN 1
        WHEN 'US'  THEN 2
        WHEN 'UK'  THEN 3
        ELSE 4
    END,
    country_name;

विधि 2: ARRAY पोजीशन (PostgreSQL 9.4+)

SELECT * FROM country_demo
ORDER BY 
    ARRAY_POSITION(ARRAY['IND','US','UK'], country_name) NULLS LAST,
    country_name;

विधि 3: VALUES के साथ JOIN (बड़े कस्टम क्रम के लिए)

SELECT c.* 
FROM country_demo c
JOIN (VALUES 
    ('IND', 1), 
    ('US', 2), 
    ('UK', 3)
) AS sort_order(val, ord) ON c.country_name = sort_order.val
ORDER BY sort_order.ord, c.country_name;

आउटपुट (सभी विधियों के लिए समान)

 country_name 
-------------
 IND
 IND
 US
 US
 UK

तुलना

विधिपक्षविपक्ष
CASEसभी PG संस्करण, पढ़ने में आसानलंबी सूची के लिए verbose
ARRAY_POSITIONसंक्षिप्त, सरणी लिटरलNULL मान अलग हैंडलिंग
VALUES JOINबड़े/डायनामिक क्रम के लिए अच्छाअधिक जटिल सिंटैक्स

नोट

PostgreSQL 14+ में ORDER BY ... USING या कस्टम कॉलेशन भी विकल्प हैं, लेकिन CASE/ARRAY सबसे पोर्टेबल हैं।

  1. - MySQL में अंतिम 3 महीने पहले, फिर वर्णानुक्रम में ऑर्डर कैसे करें?

    सशर्त ऑर्डरिंग: हाल की तारीखें पहले, फिर वर्णानुक्रम आइए पहले एक टेबल बनाते हैं: CREATE TABLE DemoTable1526 ( CustomerName VARCHAR(20), PurchaseDate DATE ); Query OK, 0 rows affected (0.67 sec) रिकॉर्ड्स डालना (2019 की तारीखें) INSERT INTO DemoTable1526 VALUES(Bob, 2019-12-31); Query OK

  1. - MySQL में ORDER BY FIELD और ID से कस्टम सॉर्ट और द्वितीयक सॉर्ट

    MySQL में ORDER BY FIELD() का उपयोग करके एक कॉलम को कस्टम क्रम में सॉर्ट करें, फिर दूसरे कॉलम से द्वितीयक सॉर्ट लागू करें। सिंटैक्स SELECT * FROM टेबल_नाम ORDER BY FIELD(कॉलम1, मान1, मान2, ...) DESC/ASC, कॉलम2 DESC/ASC; उदाहरण: Mike को पहले रखें, फिर ID अवरोही क्रम में 1. टेबल बनाएं );

  1. - MySQL में ORDER BY FIELD और OR से कस्टम क्रम में प्राथमिकता-आधारित सॉर्टिंग

    ORDER BY FIELD(col, val1, val2, ...) का उपयोग करके कस्टम प्राथमिकता क्रम में सॉर्ट करें, और WHERE ... OR ... से केवल वांछित मान चुनें। टेबल बनाएं mysql> CREATE TABLE DemoTable1884 (Marks INT); डेटा डालें mysql> INSERT INTO DemoTable1884 VALUES(55), (97), (79), (87); 98 या 87 में से उच्च प्र