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

क्वेरी में एक कॉलम को कई कॉलमों के साथ एकत्रित करें

साधारण क्वेरी

यह बहुत आसान हो सकता है PostgreSQL 9.1 या बाद के संस्करण . के साथ . जैसा कि इस निकट से संबंधित उत्तर में बताया गया है:

  • PGError:ERROR:किसी ऑब्जेक्ट और उसके has_many ऑब्जेक्ट्स की AR क्वेरी पर WHERE क्लॉज में एग्रीगेट की अनुमति नहीं है

यह GROUP BY . के लिए पर्याप्त है प्राथमिक कुंजी एक टेबल का। चूंकि:

<ब्लॉकक्वॉट>

foo1 एक प्राथमिक कुंजी है

.. आप अपने उदाहरण को सरल बना सकते हैं:

SELECT foo1, foo2, foo3, foo4, foo5, foo6, string_agg(aggregated_field, ', ')
FROM   tbl1
GROUP  BY 1
ORDER  BY foo7, foo8;  -- have to be spelled out, since not in select list!

एकाधिक तालिकाओं वाली क्वेरी

हालांकि, चूंकि आपके पास:

<ब्लॉकक्वॉट>

कई और फ़ील्ड और लेफ्ट जॉइन, महत्वपूर्ण हिस्सा यह है कि इन सभी क्षेत्रों में 1 से 1 या 1 से 0 संबंध हैं, एक फ़ील्ड को छोड़कर जो कि 1 से n है जिसे मैं एकत्र करना चाहता हूं

.. पहले एकत्र करना, बाद में शामिल होना . यह तेज़ और आसान होना चाहिए :

SELECT t1.foo1, t1.foo2, ...
     , t2.bar1, t2.bar2, ...
     , a.aggregated_col 
FROM   tbl1 t1
LEFT   JOIN tbl2 t2 ON ...
...
LEFT   JOIN (
   SELECT some_id, string_agg(agg_col, ', ') AS aggregated_col
   FROM   agg_tbl a ON ...
   GROUP  BY some_id
   ) a ON a.some_id = ?.some_id
ORDER  BY ...

इस तरह आपकी क्वेरी के बड़े हिस्से को एकत्रीकरण की बिल्कुल भी आवश्यकता नहीं है।

मैंने हाल ही में इस संबंधित उत्तर में बिंदु को साबित करने के लिए SQL Fiddle में एक परीक्षण केस प्रदान किया है:

  • PostgreSQL - एक सरणी द्वारा क्रम

चूंकि आप इस संबंधित उत्तर की बात कर रहे हैं:नहीं, DISTINCT इस मामले में बिल्कुल भी मदद नहीं करेगा।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. प्रति उपयोगकर्ता नवीनतम पंक्ति पुनर्प्राप्त करने के लिए क्वेरी द्वारा समूह अनुकूलित करें

  2. PostgreSQL कॉलम 'foo' मौजूद नहीं है

  3. PostgreSQL में सीक्वल रत्न का उपयोग करके एक सरणी सम्मिलित करना

  4. आवश्यक PostgreSQL निगरानी - भाग 3

  5. मैं एक नलबल कॉलम पर प्राथमिक कुंजी के साथ एक टेबल क्यों बना सकता हूं?