orcle逐年遞增累加、逐行累加(分析函數、開窗函數)


最近做數據統計碰到的一些問題。

需求:統計當年累計數量以及累計總和。

遇到這個問題我們可能會首先想到sum(),但是聚合函數是只返回一行的,而我們需要的結果是逐行累加,且需要多行,所以需要使用到開窗函數order by與分析函數partition by,開窗函數指定了分析函數工作的數據窗口大小,這個數據窗口大小可能會隨着行的變化而變化。

就拿我寫的sql為例:

當年累計:按照年份分組

sum(a.installNum) over (partition by to_char(a.inst_date, 'yyyy') order by a.inst_date) as 'year_num'

累計總和

sum(a.installNum) over (order by a.inst_date) as 'total_num'

 

下面列一下開窗函數與分析函數搭配使用的情況:

1.有partition by有order by :   在partition by分組下,按照不同的order by 字段   實現遞增匯總

2.有partition by無order by:  實現分組內所有數據的匯總

3.無partition by有order by : 直接按order by 字段實現遞增匯總

4.無partition by無order by:  所有數據相加

 

當然,除了使用sum() over(),還有

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 ...)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM