假设我正在尝试在数组上应用2除法
SELECT unnest(array[1.0, 2.0, 3.0])::REAL/2
这给了我三行,值为0.5,1.0和1.5。
我如何继续将其转换回数组?我试过了
SELECT array_agg(unnest(array[1.0, 2.0, 3.0])::REAL/2)
但我明白了:ERROR: set-valued function called in context that cannot accept a set
额外的问题:我如何解决同样的问题,但是在多维数组上?
SELECT unnest(array[[1.0, 0.1], [2.0, 0.2]])::REAL/2
我想要一个像"{{0.5,0.05},{1.0,0.1}}"
答案 0 :(得分:3)
关于您的第一个问题,您只需执行以下操作即可将结果集转换为ARRAY
:
SELECT ARRAY (SELECT unnest(array[1.0, 2.0, 3.0])::REAL/20)
答案 1 :(得分:1)
第一部分很简单 - 您只需添加一个额外的级别来聚合所有内容。
select array_agg(val/2)
from (select unnest(array[1.0, 2.0, 3.0]) val) t
;
至于多维案例,也许这样的事情很尴尬?
create aggregate array_array_agg(anyarray) (
sfunc=array_cat,
stype=anyarray
)
;
select array_array_agg(val)
from
(
select (select array[array_agg(val/2)]
from (select unnest((array[[1.0, 0.1], [2.0, 0.2]])[i:i]) val) t) val
from generate_series(1, array_length(array[[1.0, 0.1], [2.0, 0.2]], 1)) as i
) t
;
使用数组索引和generate_series来遍历每个数组,然后在第一步中应用逻辑。我不确定它会变得多清洁。