カスタム集計
アプローチ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クエリ
...または、順序を保持したくないので重複排除したいので、LATERAL
を使用できます。 次のようなクエリ:
SELECT title, array_agg(DISTINCT tag ORDER BY tag)
FROM my_test, unnest(tags) tag
GROUP BY title;
この場合、カスタムアグリゲートは必要ありません。これは、重複排除のため、ビッグデータセットではおそらくかなり遅くなります。 ORDER BY
を削除する ただし、必要がない場合は役立つ場合があります。