sql >> Database >  >> RDS >> PostgreSQL

Arraywaarden samenvoegen/samenvoegen tijdens groeperen/aggregeren

Aangepast aggregaat

Benadering 1:definieer een aangepast aggregaat. Hier is er een die ik eerder schreef.

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;

LATERALE zoekopdracht

... of omdat u de volgorde niet wilt behouden en wilt ontdubbelen, kunt u een LATERAL gebruiken zoekopdracht zoals:

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

in dat geval hebt u het aangepaste aggregaat niet nodig. Deze is waarschijnlijk een stuk langzamer voor grote datasets vanwege de deduplicatie. De ORDER BY verwijderen indien niet vereist kan het echter helpen.



  1. Alle PHP-fouten uitvoeren naar de database, niet error_log

  2. Kunnen we primaire sleutelwaarden van een tabel bijwerken?

  3. MySQL vs MongoDB 1000 leest

  4. MariaDB JSON_VALUE() versus JSON_QUERY():wat is het verschil?