4

我对 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 中使用合并。在我的场景中,可能存在列的 array_agg 可能导致 NULL 数组的情况。我们可以为 array_agg 使用 coalesce 吗?

例子:

select coalsece(array_agg(value1), 0)
4

1 回答 1

6

除法可能比您想象的要简单:

SELECT array_agg(value/2)
FROM ...

但是,value/2具体做什么取决于数据类型。如果 value 为integer,则截断小数位。要保留小数位数,请value/2.0改用。小数位强制计算完成numeric值进行计算。

COALESCE不会在数组之外产生任何影响。要么没有行,那么您根本就没有结果(“无行”),或者如果有,您会得到一个数组,可能带有NULL元素。但是数组本身的值永远不会NULL

用 替换单个NULL0

SELECT array_agg(coalesce(value/2.0, 0))
FROM ...
于 2013-03-26T05:20:50.307 回答