over(partition by)函数

版权声明:本文为作者原创,转载请务必注明出处! https://blog.csdn.net/qq_37545120/article/details/83994074

以前在河北省电力公司接触过一个线上办电(线上办电即手机办电)业务,为一个省公司出一个报表,用到了这个函数。

具体业务是:看这个手机tt.fk_user_id 本月or本周,受理过了多少工单,运用这个函数可以做到。

因涉及机密报表截图不予大家展示,sql执行结果请自行脑补,脚本为:

 Select substr(ps_org_no, 1, 5),
        nvl((COUNT(DISTINCT 受理申请编号) - count(distinct fk_user_id) * 9),
            0)
   from (Select ps_org_no,
                app_no 受理申请编号,
                tt.fk_user_id,
                count(1) over(partition by tt.fk_user_id) 工单总数
           from (Select b.app_no,
                        substr(b.ps_org_no, 1, 7) ps_org_no,
                        t.fk_user_id
                   from zxx_20180103_101102@zs_link b,
                        CXUSER.SY_V_tb_preapply     t
                  Where b.app_no = t.appno
                    and handle_time between to_date('20171001', 'yyyy-mm-dd') and
                        to_date('20171101', 'yyyy-mm-dd')) tt)
  Where 工单总数 >= 10
  group by substr(ps_org_no, 1, 5);

不得不佩服SQL很强大

有以下常用用法。参考了作者ugulc的文章:http://www.cnblogs.com/lcngu/p/5335170.html

       count() over(partition by ... order by ...):求分组后的总数。
  max() over(partition by ... order by ...):求分组后的最大值。
  min() over(partition by ... order by ...):求分组后的最小值。
  avg() over(partition by ... order by ...):求分组后的平均值。
  lag() over(partition by ... order by ...):取出前n行数据。 

lead() over(partition by ... order by ...):取出后n行数据。

  ratio_to_report() over(partition by ... order by ...):Ratio_to_report() 括号中就是分子,over() 括号中就是分母。

  percent_rank() over(partition by ... order by ...):

猜你喜欢

转载自blog.csdn.net/qq_37545120/article/details/83994074
今日推荐