Tilpasset aggregat
Fremgangsmåde 1:definer et tilpasset aggregat. Her er en, jeg skrev tidligere.
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;
LATERAL forespørgsel
... eller da du ikke ønsker at bevare orden og ønsker at deduplikere, kan du bruge en LATERAL
forespørgsel som:
SELECT title, array_agg(DISTINCT tag ORDER BY tag)
FROM my_test, unnest(tags) tag
GROUP BY title;
i så fald har du ikke brug for det tilpassede aggregat. Denne er sandsynligvis en smule langsommere for store datasæt på grund af deduplikeringen. Fjerner ORDER BY
hvis det ikke er nødvendigt, kan det dog hjælpe.