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

PostgreSQL 9.1:डुप्लिकेट के बिना सरणी में पंक्तियों को कैसे संयोजित करें, दूसरी तालिका में शामिल हों

विंडो फ़ंक्शंस और पेटिशनिंग का उपयोग करने के बजाय, एक क्वेरी-स्तरीय GROUP BY का उपयोग करें और एक DISTINCT क्लॉज के साथ एग्रीगेट करें:

SELECT         
  rnp.grp_id,
  array_to_string(array_agg(distinct rnp.cabinets),',') AS cabinets,
  array_to_string(array_agg(distinct ips.address),',')  AS addresses
FROM rnp JOIN ips ON rnp.grp_id=ips.grp_id GROUP BY rnp.grp_id, ips.grp_id;

परिणाम:

 grp_id |        cabinets         | addresses 
--------+-------------------------+-----------
     11 | cabs1,cabs2,cabs3,cabs4 | CA,NY
     22 | c1,c2                   | DC,LA
(2 rows)

यहां कुंजी यह है कि विंडो फ़ंक्शन और पेटिशनिंग का उपयोग करने के बजाय, आप क्वेरी-स्तर GROUP BY का उपयोग करते हैं और एक DISTINCT . के साथ समेकित करें खंड।

यह विंडो फ़ंक्शन दृष्टिकोण के साथ भी काम करेगा, सिवाय इसके कि PostgreSQL (9.1 कम से कम) DISTINCT का समर्थन नहीं करता है विंडो फ़ंक्शंस में:

regress=# SELECT DISTINCT
  rnp.grp_id,
  array_to_string(array_agg(distinct rnp.cabinets)OVER (PARTITION BY rnp.grp_id), ',') AS cabinets,                    
  array_to_string(array_agg(distinct ips.address) OVER (PARTITION BY ips.grp_id), ',') AS addresses
FROM rnp JOIN ips ON rnp.grp_id=ips.grp_id;
ERROR:  DISTINCT is not implemented for window functions
LINE 3:   array_to_string(array_agg(distinct rnp.cabinets)OVER (PART...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Django AutoField प्रारंभ मान को संशोधित करें

  2. pgadmin4 :postgresql एप्लिकेशन सर्वर से संपर्क नहीं किया जा सका।

  3. क्या तैयार विवरण या QueryRunner.update() में तालिका या स्तंभ नाम के लिए पैरामीटर की आपूर्ति करना संभव है?

  4. PostgreSQL में समानांतर अननेस्ट () और सॉर्ट ऑर्डर

  5. psql क्लाइंट अब एक शतरंज बोर्ड हो सकता है…