विंडो फ़ंक्शंस और पेटिशनिंग का उपयोग करने के बजाय, एक क्वेरी-स्तरीय 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...