array_agg()
是一个系统函数,它将输入值收集到一个数组中。
array_agg()
在PostgreSQL 8.4 中添加。
用法
array_agg (anynonarray
) →anyarray
array_agg (anyarray
) →anyarray
更改历史记录
- PostgreSQL 16
- 添加了并行聚合支持 (提交 16fd03e9)
- PostgreSQL 8.4
- 添加 (提交 0a687c8f)
示例
一个简单的人为示例,将多个行聚合到一个连接值的单个数组中
postgres=# SELECT array_agg(x || ' / ' || y) FROM (values ('foo', 'bar'), ('bar', 'baz') ) _(x, y); array_agg ----------------------- {"foo / bar","bar / baz"} (1 row)
另一个人为示例,将来自多行的值聚合到集中
postgres=# SELECT i, array_agg(x || ' / ' || y) FROM (values (1, 'foo', 'bar'), (2, 'boo', 'hoo'), (2, 'bar', 'baz') ) _(i, x,y) GROUP BY i; i | array_agg ---+--------------------------- 1 | {"foo / bar"} 2 | {"boo / hoo","bar / baz"} (2 rows)
使用ORDER BY
(推荐)来控制生成数组填充的顺序
postgres=# SELECT i, array_agg(x || ' / ' || y ORDER BY x,y) FROM (values (1, 'foo', 'bar'), (2, 'zoo', 'yum'), (2, 'boo', 'hoo'), (2, 'bar', 'baz') ) _(i, x,y) GROUP BY i; i | array_agg ---+--------------------------------------- 1 | {"foo / bar"} 2 | {"bar / baz","boo / hoo","zoo / yum"} (2 rows)
参考文献
- PostgreSQL 文档: 通用聚合函数