创建聚合函数失败

时间:2015-01-27 06:42:05

标签: aggregate-functions postgresql-9.1

在寻找返回集合的第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)不存在

我无法解决此错误。

1 个答案:

答案 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是偏移量。