在寻找返回集合的第n个元素的聚合函数时,我找到了以下解决方案:
CREATE OR REPLACE FUNCTION _final_nth( anyarray, integer )
RETURNS anyelement AS
$BODY$
SELECT a
FROM unnest( $1 ) a
ORDER BY a
offset $2
LIMIT 1;
$BODY$
LANGUAGE 'sql' IMMUTABLE;
CREATE AGGREGATE nth( anyelement, integer ) (
SFUNC=array_append,
STYPE=anyarray,
FINALFUNC=_final_nth,
INITCOND='{}'
);
创建函数工作正常,但执行CREATE AGGREGATE会产生以下错误:
错误:函数array_append(anyarray,anyelement,integer)不存在
我无法解决此错误。
答案 0 :(得分:1)
也许这会有所帮助:
CREATE OR REPLACE FUNCTION _final_nth( anyarray, integer )
RETURNS anyelement AS
$BODY$
SELECT a
FROM unnest( $1 ) a
ORDER BY a
offset $2
LIMIT 1;
$BODY$
在没有额外聚合功能的情况下使用它。
SELECT _final_nth(array_agg(someelement),n) AS someelement
FROM sometable
GROUP BY someelement;
n是偏移量。