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

Menggabungkan/menggabungkan nilai array selama pengelompokan/agregasi

Agregat khusus

Pendekatan 1:tentukan agregat khusus. Ini yang saya tulis sebelumnya.

CREATE TABLE my_test(title text, tags text[]);

INSERT INTO my_test(title, tags) VALUES
('ridealong', '{comedy,other}'),
('ridealong', '{comedy,tragedy}'),
('freddyjason', '{horror,silliness}');

CREATE AGGREGATE array_cat_agg(anyarray) (
  SFUNC=array_cat,
  STYPE=anyarray
);

select title, array_cat_agg(tags) from my_test group by title;

Kueri LATERAL

... atau karena Anda tidak ingin mempertahankan ketertiban dan ingin menghapus duplikat, Anda dapat menggunakan LATERAL permintaan seperti:

SELECT title, array_agg(DISTINCT tag ORDER BY tag) 
FROM my_test, unnest(tags) tag 
GROUP BY title;

dalam hal ini Anda tidak memerlukan agregat khusus. Yang ini mungkin sedikit lebih lambat untuk kumpulan data besar karena deduplikasi. Menghapus ORDER BY jika tidak diperlukan dapat membantu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SEPERTI permintaan pada elemen array jsonb datar

  2. java.math.BigInteger tidak dapat dilemparkan ke java.lang.Integer

  3. Pencadangan Inkremental PostgreSQL dan Pemulihan Point-In-Time

  4. Ekstrak tanggal (yyyy/mm/dd) dari stempel waktu di PostgreSQL

  5. Mengapa saya bisa membuat tabel dengan PRIMARY KEY pada kolom nullable?