我在postgres中有关于array_agg的2个问题
1)我有一个array_agg类型的列。我需要将array_agg的每个元素除以常数值。可能吗。我检查了http://www.postgresql.org/docs/9.1/static/functions-array.html,但找不到对array_agg的任何算术运算的任何引用。
编辑: 所需操作的一个例子。
select array_agg(value)/2 from some_table
在这里,我从表格value
创建了一个列some_table
的数组,我必须将每个列除以4
2)是否可以在array_agg中使用coalesce。在我的场景中,可能存在这样的情况:列的array_agg可能导致NULL数组。我们可以对array_agg使用coalesce吗?
示例:
select coalsece(array_agg(value1), 0)
答案 0 :(得分:6)
划分可能比你想象的要简单:
SELECT array_agg(value/2)
FROM ...
但是,value/2
的确取决于数据类型。如果值为integer
,则会截断小数位数。要保留小数位,请改用value/2.0
。小数位强制计算使用numeric
值完成。
COALESCE
在 数组之外没有任何区别。要么没有行,那么根本就没有结果('没有行'),或者如果有,你得到一个数组,可能有NULL
个元素。但是数组本身的值永远不会是NULL
。
使用NULL
替换单个0
值:
SELECT array_agg(coalesce(value/2.0, 0))
FROM ...