PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

PostgreSQL 9.1:Cara menggabungkan baris dalam array tanpa duplikat, GABUNG tabel lain

Alih-alih menggunakan fungsi jendela dan patitioning, gunakan GROUP BY tingkat kueri dan gabungkan dengan klausa 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;

Hasil:

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

Kuncinya di sini adalah bahwa alih-alih menggunakan fungsi window dan patitioning, Anda menggunakan GROUP BY tingkat kueri dan agregat dengan DISTINCT klausa.

Ini akan bekerja dengan pendekatan fungsi jendela juga, kecuali bahwa PostgreSQL (setidaknya 9.1) tidak mendukung DISTINCT dalam fungsi jendela:

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. Tips Dan Trik Postgres

  2. Panduan untuk Pgpool untuk PostgreSQL:Bagian Kedua

  3. Kesalahan SALINAN PG:sintaks input tidak valid untuk bilangan bulat

  4. Postgres Ubah Integer Kolom ke Boolean

  5. Deteksi item duplikat dalam CTE rekursif