ratio用法主要是迎來建立有關的資料表:Syntax
分析函式RATIO_TO_REPORT 用來計算當前記錄的指標expr佔開窗函式over中包含記錄的所有同一指標的百分比. 這裡如果開窗函式的統計結果為null或者為0,就是說佔用比率的被除數為0或者為null, 則得到的結果也為0.
開窗條件query_partition_clause決定被除數的值, 如果使用者忽略了這個條件, 則計算查詢結果中所有記錄的彙總值.
使用者不能使用其他分析函式或者ratio_to_report作為分析函式ratio_to_report的引數expr, 也就是說這個函式不能迴圈使用. 但我們可以使用其他普通函式作為這個分析函式的查詢結果.
Examples 1
下面的示例演示瞭如何計算每一個員工的工資佔部門全部工資的比例.
建立表
create table T_salary(
F_depart varchar2(20),
F_EMP varchar2(20),
F_salary integer
);
truncate table t_salary;
-- 插入測試資料
insert into t_salary(f_depart, f_emp, f_salary)
select "資訊管理部","張三",10000 from dual
union all
select "資訊管理部","李四",2000 from dual
select "人力資源部","王五",3000 from dual
select "人力資源部","趙六",10000 from dual;
commit;
--查詢每個員工佔所在部門的工資比例
select f_depart,f_emp,f_salary,sum(f_salary) over(partition by f_depart) sum_salary,
ratio_to_report(f_salary) over(partition by f_depart) ratio_salary
from t_salary;
--遞迴查詢員工佔所在部門的百分比, 以及部門所佔公司的工資比例.
select f_depart,f_emp,f_salary,g1,
sum(f_salary) over(partition by decode(g1, 0, f_depart, null), g1) sum_salary,
ratio_to_report(f_salary) over(partition by decode(g1, 0, f_depart, null), g1) r_salary
from (
select f_depart,
f_emp,
sum(f_salary) f_salary, grouping(f_depart) + grouping(F_emp) g1
from t_salary
group by rollup(f_depart, f_emp)
) t
由於分析函式可以使用普通函式的結果作為expr引數, 所以上面的程式碼又可以整合為下述方式.
sum(f_salary) f_salary,
sum(sum(f_salary)) over(partition by decode(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(partition by decode(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
group by rollup(f_depart, f_emp)。
ratio用法主要是迎來建立有關的資料表:Syntax
分析函式RATIO_TO_REPORT 用來計算當前記錄的指標expr佔開窗函式over中包含記錄的所有同一指標的百分比. 這裡如果開窗函式的統計結果為null或者為0,就是說佔用比率的被除數為0或者為null, 則得到的結果也為0.
開窗條件query_partition_clause決定被除數的值, 如果使用者忽略了這個條件, 則計算查詢結果中所有記錄的彙總值.
使用者不能使用其他分析函式或者ratio_to_report作為分析函式ratio_to_report的引數expr, 也就是說這個函式不能迴圈使用. 但我們可以使用其他普通函式作為這個分析函式的查詢結果.
Examples 1
下面的示例演示瞭如何計算每一個員工的工資佔部門全部工資的比例.
建立表
create table T_salary(
F_depart varchar2(20),
F_EMP varchar2(20),
F_salary integer
);
truncate table t_salary;
-- 插入測試資料
insert into t_salary(f_depart, f_emp, f_salary)
select "資訊管理部","張三",10000 from dual
union all
select "資訊管理部","李四",2000 from dual
union all
select "人力資源部","王五",3000 from dual
union all
select "人力資源部","趙六",10000 from dual;
commit;
--查詢每個員工佔所在部門的工資比例
select f_depart,f_emp,f_salary,sum(f_salary) over(partition by f_depart) sum_salary,
ratio_to_report(f_salary) over(partition by f_depart) ratio_salary
from t_salary;
--遞迴查詢員工佔所在部門的百分比, 以及部門所佔公司的工資比例.
select f_depart,f_emp,f_salary,g1,
sum(f_salary) over(partition by decode(g1, 0, f_depart, null), g1) sum_salary,
ratio_to_report(f_salary) over(partition by decode(g1, 0, f_depart, null), g1) r_salary
from (
select f_depart,
f_emp,
sum(f_salary) f_salary, grouping(f_depart) + grouping(F_emp) g1
from t_salary
group by rollup(f_depart, f_emp)
) t
由於分析函式可以使用普通函式的結果作為expr引數, 所以上面的程式碼又可以整合為下述方式.
select f_depart,
f_emp,
sum(f_salary) f_salary,
sum(sum(f_salary)) over(partition by decode(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(partition by decode(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
from t_salary
group by rollup(f_depart, f_emp)。