drop table test;
create table test
(
name varchar(20),
kemu varchar(20),
score number
);
insert into test values('testa','yuwen',10);
insert into test values('testa','英語',100);
insert into test values('testb','yuwen',60);
insert into test values('testb','yuwen',120);
insert into test values('testc','yuwen',40);
select name,
score,
ratio_to_report(score) over() as "佔全部科目的百分比",
ratio_to_report(score) over(partition by kemu) as "佔各科目的百分比"
from test ;
NAME SCORE 佔全部科目的百分比 佔各科目的百分比
-------------------- ---------- ------------------ ----------------
testa 10 .03030303 .043478261
testb 60 .181818182 .260869565
testc 40 .121212121 .173913043
testb 120 .363636364 .52173913
testa 100 .303030303 1oracle
drop table test;函數
試想下假設咱們沒有這個分析函數,實現就有可能以下:spa
select name,score,
(score/sum(score) over()) as "佔全部科目的百分比",
(score/sum(score) over(partition by kemu)) as "佔全部科目的百分比"
from test
group by name,score,kemu
order by 2;文檔
嘿嘿,仍是沒有那個方便,估計效率也不咋的。it
總結:1. 有了ratio_to_report分析函數,咱們避免了還須要寫分析函數,本身相除的寫法,SQL簡單實現了。io
2. site:download.oracle.com ratio_to_report 搜索oracle官方文檔table