【发布时间】:2014-10-04 06:53:51
【问题描述】:
我正在尝试创建一个需要累积所有列值以供以后处理的多列聚合函数。
CREATE OR REPLACE FUNCTION accumulate_scores(prev integer[][],l1 integer,
l2 integer,l3 integer) RETURNS integer[][] AS
$$
BEGIN
prev[1] = array_append(prev[1],l1);
prev[2] = array_append(prev[2],l2);
prev[3] = array_append(prev[3],l3);
return prev;
END
$$ LANGUAGE plpgsql;
CREATE AGGREGATE my_aggregate(integer,integer,integer)(
SFUNC = accumulate_scores,
STYPE = integer[][],
INITCOND = '{}'
);
select accumulate_scores(ARRAY[1]|| ARRAY[[1],[1]],2,3,4);
我收到此错误
ERROR: function array_append(integer, integer) does not exist
Hint: No function matches the given name and argument types. You might need to add explicit type casts.
如何将这些值累积到多维数组中?
编辑:我尝试使用 array_cat 并得到相同的错误。认为 array_append 可能是正确的,因为 prev[1] 是一维数组
【问题讨论】:
-
我认为是因为array_append以数组、元素为参数,而array_append(prev[1],l1)中的prev[1]不是数组而是值。
-
我认为您需要将array_cat用于多维数组,请参阅postgresql.org/docs/9.3/static/arrays.html。你希望的最终结果是什么?
标签: arrays postgresql multidimensional-array aggregate-functions