微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

postgresql 自定义聚合函数

方法1

CREATE OR REPLACE FUNCTION public.sfun_test1(
    results numeric[],val numeric)
    RETURNS numeric[]
    LANGUAGE plpgsql

    COST 100
    VOLATILE 
AS $BODY$

BEGIN
    results :=array_append(results,val);
RETURN results;
END;
$BODY$;

ALTER FUNCTION public.sfun_test1(numeric[],numeric)
    OWNER TO postgres;

方法2:

CREATE OR REPLACE FUNCTION public.sffun_test1(
    results numeric[])
    RETURNS numeric
    LANGUAGE plpgsql

    COST 100
    VOLATILE 
AS $BODY$
DECLARE 
    ppp integer;--百分位指标
    kkk numeric;--序号
    sss integer;--序号
    ret numeric[];--结果
BEGIN
    ppp=90;--第90百分位
    kkk=1+(array_length(results,1)-1)*ppp/100::numeric;
    sss=floor(kkk);

    ret=array_sort(results,asc);

RETURN ret[sss]+(ret[sss+1]-ret[sss])*(kkk-sss);
END;
$BODY$;

ALTER FUNCTION public.sffun_test1(numeric[])
    OWNER TO postgres;

创建聚合函数

CREATE AGGREGATE agg_test1(
BASETYPE = numeric,SFUNC = sfun_test1,STYPE = numeric[],FINALFUNC = sffun_test1
);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐