postgresql 自定义聚合函数

基础数据方法:

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;

最终数据处理方法:

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
);

 查询数据库中的聚合函数

SELECT DISTINCT(proname) FROM pg_proc WHERE proisagg order by proname 查所有

SELECT * FROM pg_proc WHERE proname like 'agg%' AND proisagg;查所有agg开头的

字符串拼接聚合函数:

CREATE AGGREGATE group_concat(anyelement)
(
  
  sfunc = array_append, -- 每行的操作函数,将本行append到数组里 
   
 stype = anyarray,  -- 聚集后返回数组类型 
 
   initcond = '{}'    -- 初始化空数组

);

 

转载于:https://www.cnblogs.com/tiandi/p/10776219.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值