以前在河北省电力公司接触过一个线上办电(线上办电即手机办电)业务,为一个省公司出一个报表,用到了这个函数。
具体业务是:看这个手机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 ...):