亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > Oracle > 正文

常用Oracle分析函數大全

2024-08-29 13:59:14
字體:
來源:轉載
供稿:網友

Oracle的分析函數功能非常強大,工作這些年來經常用到。這次將平時經常使用到的分析函數整理出來,以備日后查看。

我們拿案例來學習,這樣理解起來更容易一些。

1、建表

create table earnings -- 打工賺錢表 (  earnmonth varchar2(6), -- 打工月份  area varchar2(20), -- 打工地區  sno varchar2(10), -- 打工者編號  sname varchar2(20), -- 打工者姓名  times int, -- 本月打工次數  singleincome number(10,2), -- 每次賺多少錢  personincome number(10,2) -- 當月總收入 ) 

2、插入實驗數據

insert into earnings values('200912','北平','511601','大魁',11,30,11*30);  insert into earnings values('200912','北平','511602','大凱',8,25,8*25);  insert into earnings values('200912','北平','511603','小東',30,6.25,30*6.25);  insert into earnings values('200912','北平','511604','大亮',16,8.25,16*8.25);  insert into earnings values('200912','北平','511605','賤敬',30,11,30*11);  insert into earnings values('200912','金陵','511301','小玉',15,12.25,15*12.25);  insert into earnings values('200912','金陵','511302','小凡',27,16.67,27*16.67);  insert into earnings values('200912','金陵','511303','小妮',7,33.33,7*33.33);  insert into earnings values('200912','金陵','511304','小俐',0,18,0);  insert into earnings values('200912','金陵','511305','雪兒',11,9.88,11*9.88);  insert into earnings values('201001','北平','511601','大魁',0,30,0);  insert into earnings values('201001','北平','511602','大凱',14,25,14*25);  insert into earnings values('201001','北平','511603','小東',19,6.25,19*6.25);  insert into earnings values('201001','北平','511604','大亮',7,8.25,7*8.25);  insert into earnings values('201001','北平','511605','賤敬',21,11,21*11);  insert into earnings values('201001','金陵','511301','小玉',6,12.25,6*12.25);  insert into earnings values('201001','金陵','511302','小凡',17,16.67,17*16.67);  insert into earnings values('201001','金陵','511303','小妮',27,33.33,27*33.33);  insert into earnings values('201001','金陵','511304','小俐',16,18,16*18);  insert into earnings values('201001','金陵','511305','雪兒',11,9.88,11*9.88);  commit; 

3、查看實驗數據

select * from earnings; 

查詢結果如下

oracle分析函數大全,oracle函數

4、sum函數按照月份,統計每個地區的總收入

select earnmonth, area, sum(personincome)  from earnings  group by earnmonth,area;  

查詢結果如下

oracle分析函數大全,oracle函數

5、rollup函數按照月份,地區統計收入

select earnmonth, area, sum(personincome)  from earnings  group by rollup(earnmonth,area); 

查詢結果如下

oracle分析函數大全,oracle函數

6、cube函數按照月份,地區進行收入匯總

select earnmonth, area, sum(personincome)  from earnings  group by cube(earnmonth,area)  order by earnmonth,area nulls last; 

oracle分析函數大全,oracle函數

查詢結果如下

小結:sum是統計求和的函數。

group by 是分組函數,按照earnmonth和area先后次序分組。

以上三例都是先按照earnmonth分組,在earnmonth內部再按area分組,并在area組內統計personincome總合。

group by 后面什么也不接就是直接分組。

group by 后面接 rollup 是在純粹的 group by 分組上再加上對earnmonth的匯總統計。

group by 后面接 cube 是對earnmonth匯總統計基礎上對area再統計。

另外那個 nulls last 是把空值放在最后。 

rollup和cube區別:

如果是ROLLUP(A, B, C)的話,GROUP BY順序

(A、B、C)
(A、B)
(A)

最后對全表進行GROUP BY操作。

如果是GROUP BY CUBE(A, B, C),GROUP BY順序

(A、B、C)
(A、B)
(A、C)
(A)
(B、C)
(B)
(C)

最后對全表進行GROUP BY操作。

7、grouping函數在以上例子中,是用rollup和cube函數都會對結果集產生null,這時候可用grouping函數來確認
該記錄是由哪個字段得出來的

grouping函數用法,帶一個參數,參數為字段名,結果是根據該字段得出來的就返回1,反之返回0

select decode(grouping(earnmonth),1,'所有月份',earnmonth) 月份,      decode(grouping(area),1,'全部地區',area) 地區, sum(personincome) 總金額  from earnings  group by cube(earnmonth,area)  order by earnmonth,area nulls last; 

查詢結果如下

oracle分析函數大全,oracle函數

8、rank() over開窗函數

按照月份、地區,求打工收入排序

select earnmonth 月份,area 地區,sname 打工者, personincome 收入,       rank() over (partition by earnmonth,area order by personincome desc) 排名  from earnings; 

查詢結果如下

oracle分析函數大全,oracle函數

9、dense_rank() over開窗函數按照月份、地區,求打工收入排序2

select earnmonth 月份,area 地區,sname 打工者, personincome 收入,       dense_rank() over (partition by earnmonth,area order by personincome desc) 排名  from earnings;

查詢結果如下

oracle分析函數大全,oracle函數

10、row_number() over開窗函數按照月份、地區,求打工收入排序3

select earnmonth 月份,area 地區,sname 打工者, personincome 收入,       row_number() over (partition by earnmonth,area order by personincome desc) 排名  from earnings;

查詢結果如下

oracle分析函數大全,oracle函數

通過(8)(9)(10)發現rank,dense_rank,row_number的區別:

結果集中如果出現兩個相同的數據,那么rank會進行跳躍式的排名,

比如兩個第二,那么沒有第三接下來就是第四;

但是dense_rank不會跳躍式的排名,兩個第二接下來還是第三;

row_number最牛,即使兩個數據相同,排名也不一樣。

11、sum累計求和根據月份求出各個打工者收入總和,按照收入由少到多排序

select earnmonth 月份,area 地區,sname 打工者,       sum(personincome) over (partition by earnmonth,area order by personincome) 總收入  from earnings;

查詢結果如下

oracle分析函數大全,oracle函數

12、max,min,avg和sum函數綜合運用按照月份和地區求打工收入最高值,最低值,平均值和總額

select distinct earnmonth 月份, area 地區,      max(personincome) over(partition by earnmonth,area) 最高值,      min(personincome) over(partition by earnmonth,area) 最低值,      avg(personincome) over(partition by earnmonth,area) 平均值,      sum(personincome) over(partition by earnmonth,area) 總額  from earnings;

查詢結果如下

oracle分析函數大全,oracle函數

13、lag和lead函數求出每個打工者上個月和下個月有沒有賺錢(personincome大于零即為賺錢)

select earnmonth 本月,sname 打工者,      lag(decode(nvl(personincome,0),0,'沒賺','賺了'),1,0) over(partition by sname order by earnmonth) 上月,      lead(decode(nvl(personincome,0),0,'沒賺','賺了'),1,0) over(partition by sname order by earnmonth) 下月  from earnings;

查詢結果如下

oracle分析函數大全,oracle函數

說明:Lag和Lead函數可以在一次查詢中取出某個字段的前N行和后N行的數據(可以是其他字段的數據,比如根據字段甲查詢上一行或下兩行的字段乙)

語法如下:

lag(value_expression [,offset] [,default]) over ([query_partition_clase] order_by_clause);

lead(value_expression [,offset] [,default]) over ([query_partition_clase] order_by_clause);

其中:

value_expression:可以是一個字段或一個內建函數。

offset是正整數,默認為1,指往前或往后幾點記錄.因組內第一個條記錄沒有之前的行,最后一行沒有之后的行,default就是用于處理這樣的信息,默認為空。

再講講所謂的開窗函數,依本人遇見,開窗函數就是 over([query_partition_clase] order_by_clause)。比如說,我采用sum求和,rank排序等等,但是我根據什么來呢?over提供一個窗口,可以根據什么什么分組,就用partition by,然后在組內根據什么什么進行內部排序,就用 order by。

以上所述是小編給大家介紹的常用Oracle分析函數大全,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到oracle教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人免费视频97| 日韩精品999| 亚洲国产精品成人va在线观看| 青青草一区二区| 亚洲人午夜色婷婷| 91精品国产综合久久久久久蜜臀| 国产日韩欧美成人| 中文字幕亚洲激情| 九九热99久久久国产盗摄| 亚洲影院在线看| 日韩电影免费在线观看| 日本久久久a级免费| 欧亚精品在线观看| 欧美极品美女视频网站在线观看免费| 国产精品免费视频久久久| 欧美夫妻性生活xx| 亚洲欧美日韩一区二区三区在线| 日韩免费观看在线观看| 久久亚洲电影天堂| 亚洲人成网站色ww在线| 欧美一级大片视频| 国产精品一区二区三区毛片淫片| 亚洲成人国产精品| 国产成人精品一区二区在线| 亚洲人精选亚洲人成在线| 韩国v欧美v日本v亚洲| 精品一区二区电影| 国内精品伊人久久| 久久成人这里只有精品| 亚州欧美日韩中文视频| 欧美日韩国产中文字幕| 亚洲第一区在线观看| 国产精品jvid在线观看蜜臀| 日韩亚洲在线观看| 欧美黄色片视频| 亚洲第一精品夜夜躁人人躁| 91精品视频免费| 在线播放国产一区中文字幕剧情欧美| 亚洲а∨天堂久久精品喷水| 亚洲另类图片色| 色婷婷av一区二区三区在线观看| 国产午夜精品全部视频播放| 日韩理论片久久| 国产丝袜一区视频在线观看| 国产在线精品一区免费香蕉| 国产成人精品免高潮费视频| www.日韩免费| 国产精品99久久久久久www| 亚洲最大的成人网| 久久99精品久久久久久噜噜| 亚洲影院色在线观看免费| 久久国产加勒比精品无码| 久久精品视频一| 欧美日韩国产在线| 97不卡在线视频| 亚洲aaaaaa| 日韩在线免费视频| 国产精品极品在线| 日韩一二三在线视频播| 国产一区玩具在线观看| 92看片淫黄大片欧美看国产片| 一区二区欧美在线| 亚洲一区二区三区视频| 蜜月aⅴ免费一区二区三区| 在线成人一区二区| 国产免费一区视频观看免费| 国产精品成人在线| 国产欧洲精品视频| 日本精品一区二区三区在线| 一区二区三区国产在线观看| 超在线视频97| 午夜精品国产精品大乳美女| 国产精品678| 欧美xxxx综合视频| 久久精品国产电影| 日本中文字幕久久看| 国产精品久久久久秋霞鲁丝| 欧美成人一区二区三区电影| 日韩精品久久久久久福利| 成人在线视频福利| 国产精品99一区| 欧美精品第一页在线播放| 日韩在线观看网址| 色综合久久久久久中文网| 国产日韩av高清| 国产精品视频久久久久| 欧洲中文字幕国产精品| 亚洲精品99久久久久中文字幕| 欧美国产高跟鞋裸体秀xxxhd| 国产精品久久久久久久久男| www欧美xxxx| 中文字幕少妇一区二区三区| 国产成人精品免费久久久久| www.99久久热国产日韩欧美.com| 亚洲精品98久久久久久中文字幕| 国产精品自在线| 成人xvideos免费视频| 国内精品久久久久久中文字幕| 成人性教育视频在线观看| 亚洲欧美在线免费| 久久精品免费电影| 欧美插天视频在线播放| www.欧美免费| 成人激情在线观看| 国产成人亚洲综合青青| 亚洲午夜女主播在线直播| 97超级碰在线看视频免费在线看| 国产精品午夜一区二区欲梦| 97碰碰碰免费色视频| 国产97在线亚洲| 日韩av在线电影网| 久久影院免费观看| 蜜臀久久99精品久久久无需会员| 欧美激情精品久久久久久大尺度| 欧美激情videos| 欧美精品第一页在线播放| 欧美日韩福利视频| 久久精品电影网| 久久69精品久久久久久久电影好| 中文字幕日韩专区| 美女999久久久精品视频| 日韩中文字幕在线视频| 久久综合色影院| 亚洲最大激情中文字幕| 久久这里只有精品99| 欧美专区在线观看| 久99九色视频在线观看| 亚洲激情久久久| 精品无人区乱码1区2区3区在线| 另类专区欧美制服同性| 成人国产精品久久久| 91精品中文在线| 欧美激情第99页| 亚洲一区二区久久久久久| 亚洲自拍欧美另类| 亚洲天堂av在线免费| 久久精品国产综合| 欧美国产日韩二区| 成人做爽爽免费视频| 欧美黑人国产人伦爽爽爽| 中日韩美女免费视频网址在线观看| 亚洲精品一二区| 欧美激情女人20p| 欧美日本高清视频| 国产91在线播放精品91| 91精品在线观看视频| 成人亚洲欧美一区二区三区| 91系列在线播放| 久久夜精品va视频免费观看| 最近中文字幕mv在线一区二区三区四区| 5278欧美一区二区三区| 中文字幕视频一区二区在线有码| 亚洲精品乱码久久久久久按摩观| 国产在线拍揄自揄视频不卡99| 色老头一区二区三区在线观看| 国产成人激情小视频| 日韩在线观看免费高清完整版| 日韩欧美在线视频观看| 91豆花精品一区| 亚洲jizzjizz日本少妇| 国产精品日韩在线观看| 欧美极品少妇xxxxⅹ喷水| 日韩av在线网页| 日韩69视频在线观看|