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

Łącz/scal wartości tablicy podczas grupowania/agregacji

Agregacja niestandardowa

Podejście 1:zdefiniuj agregat niestandardowy. Oto jeden, który napisałem wcześniej.

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;

zapytanie BOCZNE

... lub ponieważ nie chcesz zachować porządku i chcesz deduplikować, możesz użyć LATERAL zapytanie takie jak:

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

w takim przypadku nie potrzebujesz agregatu niestandardowego. Ten jest prawdopodobnie nieco wolniejszy w przypadku dużych zbiorów danych ze względu na deduplikację. Usuwanie ORDER BY jeśli nie jest to wymagane, może pomóc.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MNIEJSZE PODOBNE vs iLIKE

  2. Jak sprawdzić wersję PostgreSQL

  3. Zainstaluj PostgreSQL na Ubuntu 20.04

  4. Biblioteka nie załadowana:/usr/local/opt/readline/lib/libreadline.6.2.dylib

  5. PostgreSQL JDBC Null String wzięty jako bajt