如果我的问题有点模糊,这就是我的意思,我们可以使用array_agg
聚合一行多行,例如我有这个表
foo | bar | baz
-------+-------+-------
1 | 10 | 20
1 | 12 | 23
1 | 15 | 26
1 | 16 | 21
如果我调用此查询:
select
foo,
array_agg(bar) as bars
from table
group by (foo)
导致:
foo | bars
-------+----------------
1 | {10,12,15,16}
有这个表的查询是什么(使用 bar,baz )?
foo | barbazs
-------+------------------------------------
1 | {{10,20},{12,23},{15,26},{16,21}}
我查了functions-aggregate (postgresql.org)但是它似乎没有任何功能可以产生这种效果,或者我错过了什么?
答案 0 :(得分:2)
array_agg
将数组作为可能的输入值。
我们只需要一种方法从两个输入列bar
和baz
构建一个数组,可以使用ARRAY constructor来完成:
SELECT foo, array_agg(ARRAY[bar, baz]) as barbaz FROM table GROUP BY foo;
foo | barbaz
-----+-----------------------------------
1 | {{10,20},{12,23},{15,26},{16,21}}
注意:它也适用于DISTINCT
(...array_agg(distinct array[bar,baz])...
)