Персонализиран агрегат
Подход 1:дефинирайте персонализиран агрегат. Ето един, който написах по-рано.
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
заявка като:
SELECT title, array_agg(DISTINCT tag ORDER BY tag)
FROM my_test, unnest(tags) tag
GROUP BY title;
в този случай нямате нужда от персонализиран агрегат. Този вероятно е доста по-бавен за големи набори от данни поради дедупликацията. Премахване на ORDER BY
ако не е необходимо, обаче може да помогне.