日韩性视频-久久久蜜桃-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 关键字用法简介.的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 影音先锋久久久久av综合网成人 | 少妇被黑人到高潮喷出白浆 | 一级在线| 伊人久久五月天 | 黄色片久久久 | 日韩成人免费在线 | 老头老太做爰xxx视频 | 看av网址| 麻豆视频网站入口 | 欧美精品福利 | 色综合天天综合综合国产 | 中文字幕在线观看第二页 | 亚洲视频在线观看一区二区 | 国产成人精品综合 | 99久久成人 | 天天射天天干天天色 | 一级片在线视频 | 亚洲视频一区在线 | 欧美精品久久久久久久久老牛影院 | 亚洲精品日韩综合观看成人91 | 国产视频你懂的 | a国产| 91视频色| 色综合久久88色综合天天免费 | 欧美色图第一页 | 超碰国产在线观看 | 日韩久操 | 丰满双乳秘书被老板狂揉捏 | 女女百合高h喷汁呻吟玩具 www.亚洲一区 | 黄色小视屏 | 波多野吉衣伦理片 | 少妇做爰k8经典 | 欧美日韩一区二区三区在线播放 | 福利一区在线观看 | 一区二区三区免费看视频 | 一本一道久久综合 | 日日天天干 | 久草电影在线 | 成人爱爱 | 奇米影视第4色 | 色婷婷狠狠18禁久久 | 精品一区二区三区av | k8yy毛片| 影音先锋中文字幕在线 | 91网站免费看 | 自拍偷拍校园春色 | 在线观看黄色av网站 | 日韩一区二区三区视频在线 | 97超碰自拍| 99riav国产精品 | 中文字幕一区在线 | 冲田杏梨一区二区三区 | 国产福利精品视频 | 久久国产热视频 | 国产理论视频在线观看 | 丁香一区二区 | 色欲av无码精品一区 | 国语毛片| 国产农村妇女精品一二区 | 天天操夜夜爽 | 欧美aⅴ在线 | www久久久久久 | 成年人视频在线播放 | 伊人黄网| 国产伦精品一区二区三区视频黑人 | 成年人网站免费观看 | 国产视频福利在线 | 欧美在线精品一区二区三区 | 欧美在线一二三区 | 黄色长视频 | 特黄a级片 | 欧美久久一区二区三区 | 干干操操| 淫片网站| 国产一区免费在线观看 | 欧美性做爰猛烈叫床潮 | 中文字幕精品一区二区三区精品 | 免费久久av | 色狗网站 | 青青草原成人网 | 亚洲一区二区三区电影 | 国产一级二级av | www.狠狠艹 | 国产十八熟妇av成人一区 | 欧美日韩一卡二卡 | 天堂资源| 色七七视频 | 国产第一页第二页 | 亚洲成人乱码 | 毛片88| 性午夜 | 欧美日韩国产麻豆 | 男女做网站 | 欧美成人h版 | 色狠狠一区| 五月深爱网 | 毛片视频网址 | 亚洲国产欧美自拍 | 欧美××××黑人××性爽 |