方法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] 举报,一经查实,本站将立刻删除。