创建聚合函数失败
Creating an aggregate function fails
在寻找 returns 集合的第 n 个元素的聚合函数时,我找到了以下解决方案:
CREATE OR REPLACE FUNCTION _final_nth( anyarray, integer )
RETURNS anyelement AS
$BODY$
SELECT a
FROM unnest( ) a
ORDER BY a
offset
LIMIT 1;
$BODY$
LANGUAGE 'sql' IMMUTABLE;
CREATE AGGREGATE nth( anyelement, integer ) (
SFUNC=array_append,
STYPE=anyarray,
FINALFUNC=_final_nth,
INITCOND='{}'
);
创建函数工作正常,但执行 CREATE AGGREGATE 会产生以下错误:
ERROR: function array_append(anyarray, anyelement, integer) does not exist
我无法解决这个错误。
也许这会有所帮助:
CREATE OR REPLACE FUNCTION _final_nth( anyarray, integer )
RETURNS anyelement AS
$BODY$
SELECT a
FROM unnest( ) a
ORDER BY a
offset
LIMIT 1;
$BODY$
无需额外的聚合函数即可使用它。
SELECT _final_nth(array_agg(someelement),n) AS someelement
FROM sometable
GROUP BY someelement;
n 是偏移量。
在寻找 returns 集合的第 n 个元素的聚合函数时,我找到了以下解决方案:
CREATE OR REPLACE FUNCTION _final_nth( anyarray, integer )
RETURNS anyelement AS
$BODY$
SELECT a
FROM unnest( ) a
ORDER BY a
offset
LIMIT 1;
$BODY$
LANGUAGE 'sql' IMMUTABLE;
CREATE AGGREGATE nth( anyelement, integer ) (
SFUNC=array_append,
STYPE=anyarray,
FINALFUNC=_final_nth,
INITCOND='{}'
);
创建函数工作正常,但执行 CREATE AGGREGATE 会产生以下错误:
ERROR: function array_append(anyarray, anyelement, integer) does not exist
我无法解决这个错误。
也许这会有所帮助:
CREATE OR REPLACE FUNCTION _final_nth( anyarray, integer )
RETURNS anyelement AS
$BODY$
SELECT a
FROM unnest( ) a
ORDER BY a
offset
LIMIT 1;
$BODY$
无需额外的聚合函数即可使用它。
SELECT _final_nth(array_agg(someelement),n) AS someelement
FROM sometable
GROUP BY someelement;
n 是偏移量。