over(partition by)函式
阿新 • • 發佈:2019-01-10
以前在河北省電力公司接觸過一個線上辦電(線上辦電即手機辦電)業務,為一個省公司出一個報表,用到了這個函式。
具體業務是:看這個手機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
[email protected]_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 ...):