分析函式ratio to report的使用

2021-08-14 01:59:03 字數 3490 閱讀 5393

**:

ratio_to_report函式

syntax

分析函式ratio_to_report 用來計算當前記錄的指標expr佔開窗函式over中包含記錄的所有同一指標的百分比. 這裡如果開窗函式的統計結果為null或者為0,就是說占用比率的被除數為0或者為null, 則得到的結果也為0.

開窗條件query_partition_clause決定被除數的值, 如果使用者忽略了這個條件, 則計算查詢結果中所有記錄的彙總值.

使用者不能使用其他分析函式或者ratio_to_report作為分析函式ratio_to_report的引數expr, 也就是說這個函式不能迴圈使用. 但我們可以使用其他普通函式作為這個分析函式的查詢結果.

examples 1

下面的示例演示了如何計算每乙個員工的工資佔部門全部工資的比例.

建立表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)

WITH分析函式

create table test 1 x number 10 y number 10 insert into test 1 values 1,110 insert into test 1 values 2,120 insert into test 1 values 2,80 insert into...

oracle 分析函式 排序值分析函式

一 問題描述 查詢列表時,我們有時需要對查詢結果依據某個字段進行排名。如果每條記錄在排序欄位上都不相同,我們可以將原查詢作為乙個檢視,查詢其rownum,便可以實現簡單排序,例如 但是,很多時候我們想用來排序的字段都是有重複值的,此時可能需要將值相同的記錄名詞並列,那麼我們就需要用到oracle的分...

分析函式hive計算均值 Hive 分析函式

應用場景 1 用於分割槽排序 2 top n 3 層次查詢 常用分析函式 分析函式 描述 rank 返回資料項在分割槽中的排名。排名值序列可能會有間隔 dense rank 返回資料項在分割槽中的排名。排名值序列是連續的,沒有間隔 percent rank 計算當前行的百分比排名 x 1 視窗分割槽...