postgres中对数组聚合的算术运算

时间:2013-03-26 05:09:16

标签: sql arrays postgresql types aggregate-functions

我在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)

1 个答案:

答案 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 ...