PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

PostgreSQL में unpivot () के बराबर

एक उदाहरण तालिका बनाएं:

CREATE TEMP TABLE foo (id int, a text, b text, c text);
INSERT INTO foo VALUES (1, 'ant', 'cat', 'chimp'), (2, 'grape', 'mint', 'basil');

आप UNION ALL का उपयोग करके 'अनपिवट' या 'अनक्रॉसस्टैब' कर सकते हैं:

SELECT id,
       'a' AS colname,
       a AS thing
FROM foo
UNION ALL
SELECT id,
       'b' AS colname, 
       b AS thing
FROM foo
UNION ALL
SELECT id, 
       'c' AS colname,
       c AS thing
FROM foo
ORDER BY id;

यह foo . पर 3 अलग-अलग सबक्वेरी चलाता है , प्रत्येक कॉलम के लिए एक जिसे हम अनपिवट करना चाहते हैं, और एक तालिका में, प्रत्येक सबक्वेरी से प्रत्येक रिकॉर्ड लौटाता है।

लेकिन वह तालिका को N बार स्कैन करेगा, जहां N उन स्तंभों की संख्या है जिन्हें आप अनपिवट करना चाहते हैं। यह अक्षम है, और एक बड़ी समस्या है, उदाहरण के लिए, आप एक बहुत बड़ी तालिका के साथ काम कर रहे हैं जिसे स्कैन करने में लंबा समय लगता है।

इसके बजाय, उपयोग करें:

SELECT id,
       unnest(array['a', 'b', 'c']) AS colname,
       unnest(array[a, b, c]) AS thing
FROM foo
ORDER BY id;

यह लिखना आसान है, और यह केवल एक बार तालिका को स्कैन करेगा।

array[a, b, c] ए, बी, और सी के मानों के साथ एक सरणी ऑब्जेक्ट देता है क्योंकि यह तत्व है। unnest(array[a, b, c]) प्रत्येक सरणी के तत्वों के लिए परिणामों को एक पंक्ति में तोड़ता है।

आशा है कि इससे मदद मिलेगी!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgresql में एक अपरर्ट प्रदर्शन करते समय आंशिक सूचकांक का उपयोग संघर्ष खंड में नहीं किया जाता है

  2. यदि PostgreSQL पर मौजूद नहीं है तो कॉलम कैसे जोड़ें?

  3. Amazon AWS का उपयोग करके PostgreSQL के लिए कोल्ड स्टैंडबाय बनाना

  4. पोस्टग्रेज में कॉलम को कई पंक्तियों में विभाजित करें

  5. PostgreSQL में NULL की n पंक्तियाँ उत्पन्न करें