zoukankan      html  css  js  c++  java
  • 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 = '{}'    -- 初始化空数组
    
    );
  • 相关阅读:
    HTML常用元素标签
    属性列表-边框属性
    (5)opencv的基础操作和矩阵的掩模操作
    (4)关于Alpha通道问题
    (3)关于命名空间的问题
    (2)关于opencv解压
    (1)opencv的安装和遇到的问题
    给adobe acrobat reader 添加图片注释
    安装adobe reader阅读器
    apache安装和mysql php配置问题
  • 原文地址:https://www.cnblogs.com/tiandi/p/10776219.html
Copyright © 2011-2022 走看看