ratio_to_report函式
syntax
分析函式ratio_to_report 用來計算當前記錄的指標expr佔開窗函式over中包含記錄的所有同一指標的百分比. 這裡如果開窗函式的統計結果為null或者為0,就是說占用比率的被除數為0或者為null, 則得到的結果也為0.
開窗條件query_partition_clause決定被除數的值, 如果使用者忽略了這個條件, 則計算查詢結果中所有記錄的彙總值.
使用者不能使用其他分析函式或者ratio_to_report作為分析函式ratio_to_report的引數expr, 也就是說這個函式不能迴圈使用. 但我們可以使用其他普通函式作為這個分析函式的查詢結果.
examples1
下面的示例演示了如何計算每乙個員工的工資佔部門全部工資的比例.
建立表createtablet_salary(
f_departvarchar2(
20),
f_empvarchar2(
20),
f_salaryinteger
);truncatetablet_salary;
-- 插入測試資料
insertintot_salary(f_depart, f_emp, f_salary)
select
'資訊管理部'
,'張三'
,10000
fromdual
unionall
select
'資訊管理部'
,'李四'
,2000
fromdual
unionall
select
'人力資源部'
,'王五'
,3000
fromdual
unionall
select
'人力資源部'
,'趙六'
,10000
fromdual;
commit;
--查詢每個員工佔所在部門的工資比例
selectf_depart,f_emp,f_salary,sum(f_salary) over(partitionbyf_depart) sum_salary,
ratio_to_report(f_salary) over(partitionbyf_depart) ratio_salary
fromt_salary;
--遞迴查詢員工佔所在部門的百分比, 以及部門所佔公司的工資比例.
selectf_depart,f_emp,f_salary,g1,
sum(f_salary) over(partitionbydecode(g1,
0, f_depart,null), g1) sum_salary,
ratio_to_report(f_salary) over(partitionbydecode(g1,
0, f_depart,null), g1) r_salary
from(
selectf_depart,
f_emp,
sum(f_salary) f_salary,grouping(f_depart) +grouping(f_emp) g1
fromt_salary
groupbyrollup(f_depart, f_emp)
) t
由於分析函式可以使用普通函式的結果作為expr引數, 所以上面的**又可以集成為下述方式.
selectf_depart,
f_emp,
sum(f_salary) f_salary,
sum(sum(f_salary)) over(partitionbydecode(grouping(f_depart) +grouping(f_emp),
0, f_depart,null),grouping(f_depart) +grouping(f_emp)) sum_salary,
ratio_to_report(sum(f_salary)) over(partitionbydecode(grouping(f_depart) +grouping(f_emp),
0, f_depart,null),grouping(f_depart) +grouping(f_emp)) r_salary,
grouping(f_depart) +grouping(f_emp) g1
fromt_salary
groupbyrollup(f_depart, f_emp)
Oracle分析函式七 分析函式案例
環比就是現在的統計週期和上乙個統計週期比較。例如 2008 年 7 月份與 2008 年 6 月份相比較稱其為環比。環比發展速度是報告期水平與前一時期水平之比,表明現象逐期的發展速度。如計算一年內各月與前乙個月對比,即 2 月比 1 月,3 月比 2 月,4 月比 3 月 12 月比 11 月,說明...
Oracle分析函式七 分析函式案例
oracle 分析函式 分析函式案例 環比環比就是現在的統計週期和上乙個統計週期比較。例如 2008年7 月份與2008年6 月份相比較稱其為環比。環比發展速度是報告期水平與前一時期水平之比,表明現象逐期的發展速度。如計算一年內各月與前乙個月對比,即2月比 1月,3月比 2月,4月比 3月 12 月...
遞迴函式的一點分析
1.主要目的 為了知道遞迴函式返回數值時的順序 2.實驗 使用最簡單的階乘來實驗 對遞迴函式的輸出順序的實驗 用到階乘 include include int main int n jiecheng int n return s 3.輸出結果 enter an integer 1 to 12 i w...