Ora*_*Dog 6 postgresql aggregate array postgresql-10
给定一个数据集(GIN索引为values):
key | values
-------------
1 | {4,2,1}
1 | {2,5}
2 | {4,1,3}
Run Code Online (Sandbox Code Playgroud)
我想聚合数组:
key | values
-------------
1 | {4,2,1,5}
2 | {4,1,3}
Run Code Online (Sandbox Code Playgroud)
我的第一个想法不起作用:
SELECT key, array_agg(DISTINCT unnest(values)) AS values FROM data GROUP BY key
Run Code Online (Sandbox Code Playgroud)
[0A000] 错误:聚合函数调用不能包含返回集合的函数调用
提示:您可以将返回集合的函数移动到 LATERAL FROM 项中。
不熟悉LATERAL FROM,对我来说如何实现所需的输出并不明显。
a_h*_*ame 11
您需要在子查询中执行取消嵌套:
select d."key", array_agg(distinct x.v)
from data d
cross join lateral unnest(d."values") as x(v)
group by d."key";
Run Code Online (Sandbox Code Playgroud)
设置返回函数(如unnest())通常应用于from查询部分。但是为了能够引用表中的列,您需要横向连接。
from data cross join lateral unnest(...)是一种显式的书写方式,from data, unnest(...)它也生成一个交叉连接。但我更喜欢显式cross join运算符来记录我确实打算编写交叉连接,而不是意外。
然而,这不会保留元素的顺序。
在线示例:https : //rextester.com/TVIDB57711
| 归档时间: |
|
| 查看次数: |
4575 次 |
| 最近记录: |