日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Oracle rollup 关键字用法简介.

發布時間:2025/3/20 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle rollup 关键字用法简介. 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 什么是Rollup

在PL/sql 中,? Rollup 這個關鍵字通常用于select 語句的 group by 后面.

在group by 后面使用rollup關鍵字,? select語句就可以對指定的分組的數據左匯總小計(求和).


一旦使用rollup,?? 在數據集中, rollup的列會被自動排序.

rollup 會創建n+1 層次的匯總. n是rollup 匯總的列的個數.? 在實際操作中. 假如我們在rollup后面指定匯總 時間, 區域, 部門的匯總的數據.(n=3), 那么數據集的會含有4級的匯集行數據.


當對多個列進行匯集匯總時, 方向只能根據group by 的方向從右向左. 例如, 當使用group by( year, month, day),? 匯總方向就是從day -> month -> year 的方向匯總.



2. 什么情況下應該使用rollup

上面已經提過了, 當我們需要對group by 分組數據集進行匯總小計時,? 可以使用rollup 擴展.


a.? rollup 會幫助我們對數據集進行按照時間或地理區域進行分層次的匯總.? 實際操作中,? 我們可以在查詢語句中指定要匯總小計的列. e.g. Rollup(y, m, day) or (country, state, city)


b. 對于數據倉庫,? rollup關鍵字能提升管理員維護匯總表數據的效率.


3. Rollup 語法以及例子

語法很簡單:? Rollup 必須在selet 語句中 group by子句下使用. 語法如下:

SELECT ... GROUP BY ROLLUP(grouping_column_reference_list)


下面用1個例子說明:

首先我們使用如下的表sales_amount作為檢索的數據源:

這個標很簡單具有5個列, 分別是部門編號, 姓名, 年, 月 ,銷售額.



DEP? EMP?? ??? YEAR? MONTH?? ? SALES
-------------------- ---------- ---------- ----------
?? ? 1 Jack ?? ???? 2012?? ? 11?? ?? 3000
?? ? 1 Gordon??? 2012?? ? 11?? ?? 2000
?? ? 1 Jack ?? ???? 2012?? ? 12?? ?? 1000
?? ? 1 Gordon??? 2012?? ? 12?? ?? 3000
?? ? 1 Jack ?? ???? 2013?? ?? 1?? ?? 2000
?? ? 1 Gordon??? 2013?? ?? 1?? ?? 1000
?? ? 2 Bill ?? ???????? 2012?? ? 12?? ?? 3000
?? ? 2 Ruler?? ???? 2012?? ? 12?? ?? 2000
?? ? 2 Bill ?? ??????? 2013?? ?? 1?? ?? 1000
?? ? 2 Ruler?? ???? 2013?? ?? 1?? ?? 3000
?? ? 3 Anna ?? ???? 2012?? ? 12?? ?? 2000
?? ? 3 Cindy?? ???? 2012?? ? 12?? ?? 1000
?? ? 3 Anna ?? ???? 2013?? ?? 1?? ?? 3000
?? ? 3 Cindy?? ???? 2013?? ?? 1?? ?? 4000

建表sql:

create table sales_amount( dep number(3),emp varchar(10),year number(4),month number(2),sales number(8,2))insert into sales_amount values(1, 'Jack', 2012, 11, 3000); insert into sales_amount values(1, 'Gordon', 2012, 11, 2000); insert into sales_amount values(1, 'Jack', 2012, 12, 1000); insert into sales_amount values(1, 'Gordon', 2012, 12, 3000); insert into sales_amount values(1, 'Jack', 2013, 1, 2000); insert into sales_amount values(1, 'Gordon', 2013, 1, 1000); insert into sales_amount values(2, 'Bill', 2012, 12, 3000); insert into sales_amount values(2, 'Ruler', 2012, 12, 2000); insert into sales_amount values(2, 'Bill', 2013, 1, 1000); insert into sales_amount values(2, 'Ruler', 2013, 1, 3000); insert into sales_amount values(3, 'Anna', 2012, 12, 2000); insert into sales_amount values(3, 'Cindy', 2012, 12, 1000); insert into sales_amount values(3, 'Anna', 2013, 1, 3000); insert into sales_amount values(3, 'Cindy', 2013, 1, 4000); commit;

case 1:

我們首先用最常用group by語句對銷售額按照部門- > 年 -> 月來進行銷售額求和:


select dep, year, month, sum(sales)
from sales_amount
group by dep, year, month
order by dep, year, month??? ##
group by 子句后一般跟隨排序子句


輸出:


?????? DEP YEAR????? MONTH SUM(SALES)
---------- ---------- ---------- ----------
???????? 1?????? 2012???????? 11?????? 5000
???????? 1?????? 2012???????? 12?????? 4000
???????? 1?????? 2013????????? 1?????? 3000
???????? 2?????? 2012???????? 12?????? 5000
???????? 2?????? 2013????????? 1?????? 4000
???????? 3?????? 2012???????? 12?????? 3000
???????? 3?????? 2013????????? 1?????? 7000?


可以見到輸出的數據中有7行,? 實際上只對 mount 這一列做了匯總,? 意思是如果我想知道部門1的總銷售額, 部門1 2013年的銷售額還必須進行進一步的計算.



case 2:

我們試下為group by中最后1個列 month 加上 rollup

select dep, year, month, sum(sales)
from sales_amount
group by? dep, year, rollup(month)
#不需要排序子句?? n=1


?????? DEP?????? YEAR????? MONTH SUM(SALES)
---------- ---------- ---------- ----------
???????? 1?????? 2012???????? 11?????? 5000
???????? 1?????? 2012???????? 12?????? 4000
???????? 1?????? 2012????????????????? 9000
???????? 1?????? 2013????????? 1?????? 3000
???????? 1?????? 2013????????????????? 3000
???????? 2?????? 2012???????? 12?????? 5000
???????? 2?????? 2012????????????????? 5000
???????? 2?????? 2013????????? 1?????? 4000
???????? 2?????? 2013????????????????? 4000
???????? 3?????? 2012???????? 12?????? 3000
???????? 3?????? 2012????????????????? 3000
???????? 3?????? 2013????????? 1?????? 7000
???????? 3?????? 2013????????????????? 7000


?看到result 中多了若干行對 month的上一級? 的year進行匯總.? 這時數據集的行具有兩層, 也就是本文一開始提到的n+1層.


case 3:

這次我們在rollup里增加1個列. n=2

select dep, year, month, sum(sales)
from sales_amount
group by? dep, rollup(year, month)




?????? DEP?????? YEAR????? MONTH SUM(SALES)
---------- ---------- ---------- ----------
???????? 1?????? 2012???????? 11?????? 5000
???????? 1?????? 2012???????? 12?????? 4000
???????? 1?????? 2012????????????????? 9000
???????? 1?????? 2013????????? 1?????? 3000
???????? 1?????? 2013????????????????? 3000
???????? 1???????????????????????????????? 12000
???????? 2?????? 2012???????? 12?????? 5000
???????? 2?????? 2012????????????????? 5000
???????? 2?????? 2013????????? 1?????? 4000
???????? 2?????? 2013????????????????? 4000
???????? 2???????????????????????????????? 9000
???????? 3?????? 2012???????? 12?????? 3000
???????? 3?????? 2012????????????????? 3000
???????? 3?????? 2013????????? 1?????? 7000
???????? 3?????? 2013????????????????? 7000
???????? 3????????????????????????? ? ? ?? 10000


這次是對 month 和 year的上一層(就是year 和 dep) 進行匯總.

?可以見到這case比上1個case多了3行對于部門編號 dep 的匯總.? 也就是year的上一層.

整個數據集有3層, 就是n+1 層啦.


case 4:

這次n=3.? 把group by 的3個列都放入rollup 中.

select dep, year, month, sum(sales)
from sales_amount
group by? rollup(dep, year, month)


???? DEP?????? YEAR????? MONTH SUM(SALES)
---------- ---------- ---------- ----------
???????? 1?????? 2012???????? 11?????? 5000
???????? 1?????? 2012???????? 12?????? 4000
???????? 1?????? 2012????????????????? 9000
???????? 1?????? 2013????????? 1?????? 3000
???????? 1?????? 2013????????????????? 3000
???????? 1???????????????????????????????? 12000
???????? 2?????? 2012???????? 12?????? 5000
???????? 2?????? 2012????????????????? 5000
???????? 2?????? 2013????????? 1?????? 4000
???????? 2?????? 2013????????????????? 4000
???????? 2???????????????????????????????? 9000
???????? 3?????? 2012???????? 12?????? 3000
???????? 3?????? 2012????????????????? 3000
???????? 3?????? 2013????????? 1?????? 7000
???????? 3?????? 2013????????????????? 7000
???????? 3????????????????????????? ? ? ?? 10000

??????????????????????????????????????????? 31000



可以見到數據集又多了1行(1層),??? 那個就是對dep的上一層. 就是所有的總數據了.

數據集共有4層 還是n+1哦



4.小結:

本文只是簡單介紹,??

但起碼我們可以了解到rollup的幾個基本特性:

1. 用于group by后面

2. 用于匯總分組數據

3. 方向只能基于 group by的反方向 從右到左.


所以ocp有一題如下:

20. In which scenario would you use the ROLLUP operator for expression or columns within a GROUP BY clause?
?
A. to find the groups forming the subtotal in a row
B. to create groupwise grand totals for the groups specified within a GROUP BY clause
C. to create a grouping for expressions or columns specified within a GROUP BY clause in one direction, from right to left for calculating the subtotals
D. to create a grouping for expressions or columns specified within a GROUP BY clause in all possible directions, which is crosstabular report for calculating the subtotals


分析1:

A. in a row錯誤,? 是從group by result中所有rows的每1個分組進行匯總

B. 不是create groupwise grand totals(總的匯總),? 而是對指定的列都進行分層次的匯總.

D. 只能從右到左1個方向.

答案: C

























總結

以上是生活随笔為你收集整理的Oracle rollup 关键字用法简介.的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 性一交一乱一色一免费无遮挡 | 日韩啊v | www.香蕉视频在线观看 | 韩日免费av| 国产精品第二十页 | 成人免费高清在线播放 | 少妇精品无码一区二区免费视频 | 男人桶女人桶爽30分钟 | 亚洲视频图片 | 日韩欧美在线视频免费观看 | 秋霞影院午夜丰满少妇在线视频 | 黄色免费av| 极品少妇网站 | 黑人3p波多野结衣在线观看 | 最新色网址 | 爽好多水快深点欧美视频 | 少妇人妻偷人精品无码视频 | www.超碰97.com| 在线中文字幕网站 | 日本少妇喷水 | 叼嘿视频在线免费观看 | 97操 | 91av在线看 | 天天干天天操天天拍 | 一区二区三区免费网站 | 欧美黑人精品 | 婷婷九月| 一级做a免费 | 国产最新网址 | 美女被出白浆 | 毛片h| 亚洲精品乱码久久久久久按摩观 | 美女插插| а天堂中文在线官网 | 国产亚洲成人精品 | 欧美日韩国产一区在线 | 亚洲国产天堂 | 欧美日韩中文字幕视频 | xxxx在线播放 | 天天摸天天做 | 91九色中文 | 欧美黄色性| 日日夜夜中文字幕 | 最新中文字幕在线观看视频 | 成人毛片一区二区三区 | 亚洲少妇激情 | 欧美涩涩视频 | 亚洲丝袜视频 | 亚洲成av人影院 | 国产女人18毛片水18精 | 日韩精品人妻一区 | 青青青国内视频在线观看软件 | 无码人妻精品一区二区蜜桃视频 | 男女日批网站 | 日本成人一二三区 | 护士的小嫩嫩好紧好爽 | 午夜视频免费在线 | jjzz日本女人| 韩国19主播内部福利vip | 先锋资源av在线 | 黄色国产精品 | 免费激情| 亚洲三级在线视频 | 女人又爽又黄免费女仆 | 奇米av在线| 国产又粗又硬又黄的视频 | 就爱操av | 日本福利视频导航 | 欧美成人吸奶水做爰 | 国产日韩综合 | 波多野结衣视频在线 | 国产欧美日韩综合 | 日本狠狠操 | 精东传媒在线观看 | 97免费在线| 女厕厕露p撒尿八个少妇 | 少妇又紧又色 | 曰本黄色片 | 国产三级精品三级在线 | 色综合天天操 | 毛片自拍| 视频在线观看电影完整版高清免费 | 超碰人人人人人人人 | 女人高潮特级毛片 | 国产精品一区二区三区久久久 | 91在线播放国产 | 97性视频 | 日韩福利在线视频 | 欢乐谷在线观看免费播放高清 | 黄色长视频 | 91在线网站 | 中文字幕在线观看视频一区二区 | 懂色av色吟av夜夜嗨 | 好色av | aa丁香综合激情 | 国产精品自产拍在线观看 | 青青草精品在线 | 国产aaaaaa | 花房姑娘免费观看全集 |