Oracle開發(fā)之報(bào)表函數(shù)
一、回顧一下前面《Oracle開發(fā)之窗口函數(shù)》中關(guān)于全統(tǒng)計(jì)一節(jié),我們使用了Oracle提供的:
來統(tǒng)計(jì)全年的訂單總額,這個(gè)函數(shù)會(huì)在記錄集形成的過程中,每檢索一條記錄就執(zhí)行一次,它總共執(zhí)行了12次。這是非常費(fèi)時(shí)的。實(shí)際上我們還有更簡(jiǎn)便的方法:
sum(tot_sales) month_sales,
sum(sum(tot_sales)) over(order by month
rows between unbounded preceding and unbounded following) win_sales,
sum(sum(tot_sales)) over() rpt_sales
from orders
group by month;
MONTH MONTH_SALES WINDOW_SALES REPORT_SALES
---------- ----------- ------------ ------------
1 610697 6307766 6307766
2 428676 6307766 6307766
3 637031 6307766 6307766
4 541146 6307766 6307766
5 592935 6307766 6307766
6 501485 6307766 6307766
7 606914 6307766 6307766
8 460520 6307766 6307766
9 392898 6307766 6307766
10 510117 6307766 6307766
11 532889 6307766 6307766
12 492458 6307766 6307766
已選擇12行。
over函數(shù)的空括號(hào)表示該記錄集的所有記錄都應(yīng)該被列入統(tǒng)計(jì)的范圍,如果使用了partition by則先分區(qū),再依次統(tǒng)計(jì)各個(gè)分區(qū)。
二、RATIO_TO_REPORT函數(shù):
報(bào)表函數(shù)特(窗口函數(shù))特別適合于報(bào)表中需要同時(shí)顯示詳細(xì)數(shù)據(jù)和統(tǒng)計(jì)數(shù)據(jù)的情況。例如在銷售報(bào)告中經(jīng)常會(huì)出現(xiàn)這樣的需求:列出上一年度每個(gè)月的銷售總額、年底銷售額以及每個(gè)月的銷售額占全年總銷售額的比例:
方法①:
100 * round(cust_sales / region_sales, 2) || '%' Percent
from (select o.cust_nbr customer,
o.region_id region,
sum(o.tot_sales) cust_sales,
sum(sum(o.tot_sales)) over(partition by o.region_id) region_sales
from orders_tmp o
where o.year = 2001
group by o.region_id, o.cust_nbr) all_sales
where all_sales.cust_sales > all_sales.region_sales * 0.2;
這是一種笨方法也是最易懂的方法。
方法②:
sum(tot_sales) sp_sales,
round(sum(tot_sales) / sum(sum(tot_sales))
over (partition by region_id), 2) percent_of_region
from orders
where year = 2001
group by region_id, salesperson_id
order by region_id, salesperson_id;
方法③
sum(tot_sales) sp_sales,
round(ratio_to_report(sum(tot_sales))
over (partition by region_id), 2) sp_ratio
from orders
where year = 2001
group by region_id, salesperson_id
order by region_id, salesperson_id;
Oracle提供的Ratio_to_report函數(shù)允許我們計(jì)算每條記錄在其對(duì)應(yīng)記錄集或其子集中所占的比例。
以上就是Oracle報(bào)表函數(shù)用法的全部?jī)?nèi)容,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Oracle 函數(shù)大全[字符串函數(shù),數(shù)學(xué)函數(shù),日期函數(shù)]
- oracle 存儲(chǔ)過程和函數(shù)例子
- ORACLE常用數(shù)值函數(shù)、轉(zhuǎn)換函數(shù)、字符串函數(shù)
- Oracle中instr函數(shù)使用方法
- 給Oracle添加split和splitstr函數(shù)的方法
- oracle to_char函數(shù)將number轉(zhuǎn)成string
- Oracle round()函數(shù)與trunc()函數(shù)區(qū)別介紹
- Oracle隨機(jī)函數(shù)之dbms_random使用詳解
- ORACLE時(shí)間函數(shù)(SYSDATE)深入理解
- oracle中的trim函數(shù)使用介紹
相關(guān)文章
ORACLE多條件統(tǒng)計(jì)查詢的簡(jiǎn)單方法
這篇文章主要介紹了ORACLE多條件統(tǒng)計(jì)查詢的簡(jiǎn)單方法,具有一定參考價(jià)值。這里給大家分享下,希望對(duì)大家有所幫助。2017-10-10
oracle的歸檔模式 ORACLE數(shù)據(jù)庫(kù)歸檔日志常用命令
Oracle數(shù)據(jù)庫(kù)有聯(lián)機(jī)重做日志,這個(gè)日志是記錄對(duì)數(shù)據(jù)庫(kù)所做的修改,比如插入,刪除,更新數(shù)據(jù)等,對(duì)這些操作都會(huì)記錄在聯(lián)機(jī)重做日志里2013-01-01
Oracle中多表關(guān)聯(lián)批量插入批量更新與批量刪除操作
這篇文章主要介紹了Oracle中多表關(guān)聯(lián)批量插入,批量更新與批量刪除操作,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12
數(shù)據(jù)庫(kù)表分割技術(shù)淺析(水平分割/垂直分割/庫(kù)表散列)
數(shù)據(jù)庫(kù)表分割技術(shù)包含以下內(nèi)容:水平分割/垂直分割/庫(kù)表散列.接下來將對(duì)以上分割進(jìn)行詳細(xì)介紹,感興趣的朋友可以了解下,對(duì)你日后維護(hù)數(shù)據(jù)庫(kù)是很有幫助的2013-01-01
oracle數(shù)據(jù)庫(kù)查看鎖表的sql語句整理
Oracle數(shù)據(jù)庫(kù)操作中,我們有時(shí)會(huì)用到鎖表查詢以及解鎖和kill進(jìn)程等操作,這篇文章主要給大家介紹了關(guān)于oracle數(shù)據(jù)庫(kù)查看鎖表的sql語句的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-10-10

