给定一个数据集(GIN
索引为values
):
key | values
-------------
1 | {4,2,1}
1 | {2,5}
2 | {4,1,3}
我想聚合数组:
key | values
-------------
1 | {4,2,1,5}
2 | {4,1,3}
我的第一个想法没有奏效:
SELECT key, array_agg(DISTINCT unnest(values)) AS values FROM data GROUP BY key
[0A000] 错误:聚合函数调用不能包含集合返回函数调用
提示:您可能能够将集合返回函数移动到 LATERAL FROM 项中。
不熟悉LATERAL FROM
,对我来说如何实现所需的输出并不明显。
您需要在子查询中进行嵌套:
集合返回函数(如
unnest()
)通常应在from
查询部分使用。但是为了能够引用表中的列,您需要横向连接。from data cross join lateral unnest(...)
是一种显式的书写方式,from data, unnest(...)
它也会生成交叉连接。但我更喜欢显式cross join
运算符来记录我确实打算编写交叉连接,而不是意外。但是,这不会保留元素的顺序。
在线示例:https ://rextester.com/TVIDB57711