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 सबसे पोर्टेबल हैं।