PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

PostgreSQL 9.1:Jak łączyć wiersze w tablicy bez duplikatów, DOŁĄCZ do innej tabeli

Zamiast korzystać z funkcji okna i tworzenia poprawek, użyj funkcji GROUP BY na poziomie zapytania i agregacji z klauzulą ​​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;

Wynik:

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

Kluczem jest tutaj to, że zamiast korzystać z funkcji okna i tworzenia poprawek, używasz GROUP BY na poziomie zapytania i agregować z DISTINCT klauzula.

Działałoby to również z podejściem funkcji okna, z wyjątkiem tego, że PostgreSQL (przynajmniej w wersji 9.1) nie obsługuje DISTINCT w funkcjach okien:

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. Indeks PostgreSQL w JSON

  2. Jak wyświetlić kod CREATE VIEW dla widoku w PostgreSQL?

  3. Automatyzacja Barmana z Puppet:it2ndq/barman (część druga)

  4. Postgres:WSTAW, jeśli jeszcze nie istnieje

  5. Jak zaimportować dane z CSV do tabeli Postgres za pomocą pgAdmin 3?