美文网首页
postgre常用sql

postgre常用sql

作者: 长振 | 来源:发表于2020-12-03 20:56 被阅读0次
    1. 月份补足两位
    select lpad('1', 2, '0')
    
    1. 取最后一段
    select split_part('aa,bb,cc,dd',',',1);
    select reverse(split_part(reverse('aa,bb,cc,dd'),',',1));--不知道有几段,倒过来找
    
    1. 递归查询
    WITH RECURSIVE cte_name(
        CTE_query_definition -- non-recursive term
        UNION [ALL]
        CTE_query definion  -- recursive term
    ) SELECT * FROM cte_name;
    
    1. 累计完成度
      8-1是周六,当周只有2天
    with tmp as(
    select extract(week from sale_date) weekid,extract(month from sale_date) monthid,
    sum(sale_real_amt_wtd) sum_real,--当周完成
    sum(sale_basic_amt_target_wtd) sum_obj,--当周目标
    avg(sale_climb_amt_target_wtd) month_obj--当月目标
    from tenant_1800000143_rst.bi_fct_store_day_sales
    where sale_date>=(substring(dt,1,8)||'01')::date and sale_date<'2020-09-01'::date 
    group by weekid,monthid
    )
    select a.*,(sum(sum_real) over (partition by monthid order by weekid))/month_obj --月目标比率累计完成度
    from tmp a order by weekid
    
    1. 求周一
    -- 在public下创建,调用时不用加schema,更方便(周日的dow是0)
    create or replace function get_monday(dt varchar)
    RETURNS varchar AS $BODY$
    begin --select tenant_1800000143_rst.get_monday('2020-12-02')
        return to_char(((-1*mod((6+EXTRACT(DOW FROM dt::date))::int,7) || ' days'):: interval + dt::date),'YYYY-MM-DD');
    END
    $BODY$
      LANGUAGE plpgsql
    
    -- 调用
    select get_monday('2020-12-02')
    
    1. 除0
    select a/nullif(b,0)
    
    1. python写存过
    CREATE FUNCTION pymax (a integer, b integer)
      RETURNS integer
    AS $$ --create extension plpython3u;
      if a > b:
        return a
      return b
    $$ LANGUAGE plpython3u;
    

    相关文章

      网友评论

          本文标题:postgre常用sql

          本文链接:https://www.haomeiwen.com/subject/ajtvwktx.html