sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL 9.1:Hoe rijen in een array samen te voegen zonder duplicaten, JOIN in een andere tabel

Gebruik in plaats van vensterfuncties en patitionering een GROUP BY op queryniveau en aggregeer met een DISTINCT-clausule:

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;

Resultaat:

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

De sleutel hier is dat in plaats van vensterfuncties en patitionering te gebruiken, u een GROUP BY op queryniveau gebruikt en aggregeer met een DISTINCT clausule.

Dit zou ook werken met de benadering van de vensterfunctie, behalve dat PostgreSQL (tenminste 9.1) DISTINCT niet ondersteunt in vensterfuncties:

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. De anatomie van SQL Server-impasses en de beste manieren om ze te vermijden

  2. Oracle JDeveloper 12c gebruiken met Oracle Database 12c op Oracle Cloud Platform, deel 3

  3. Hoe retourneer ik een jsonb-array en een array met objecten uit mijn gegevens?

  4. Verleen alles op een specifiek schema in de db aan een groepsrol in PostgreSQL