黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 詳解Oracle分析函數(shù)

詳解Oracle分析函數(shù)

更新時間:2021-03-04 17:57:09 來源:動力節(jié)點 瀏覽1712次

分析函數(shù)是Oracle專門用于解決復(fù)雜報表統(tǒng)計需求的功能強大的函數(shù),它可以在數(shù)據(jù)中進行分組然后計算基于組的某種統(tǒng)計值,并且每一組的每一行都可以返回一個統(tǒng)計值。分析函數(shù)帶有一個開窗函數(shù)over(),包含三個分析子句:分組(partition by), 排序(order by), 窗口(rows) ,他們的使用形式如下:over(partition by xxx order by yyy rows between zzz)。

Oracle分析函數(shù)的學(xué)習(xí)有以下幾個關(guān)鍵點:

1.對一組數(shù)據(jù)進行計算,返回多行。

2.不需要進行多表聯(lián)合,提高性能。

3.在所有表連接和所有WHERE, GROUP BY和HAVING字句之后處理,在ORDER BY子句之前處理。

4.只能位于SELECT或者ORDER BY子句。

分析函數(shù)語法:

FUNCTION_NAME(,...)

OVER

()

例:

sum(sal) over (partition by deptno order by ename) new_alias

sum就是函數(shù)名

(sal)是分析函數(shù)的參數(shù),每個函數(shù)有0~3個參數(shù),參數(shù)可以是表達式,例如:sum(sal+comm)

over是一個關(guān)鍵字,用于標識分析函數(shù),否則查詢分析器不能區(qū)別sum()聚集函數(shù)和sum()分析函數(shù)。

partition by deptno 是可選的分區(qū)子句,如果不存在任何分區(qū)子句,則全部的結(jié)果集可看作一個單一的大區(qū)。

order by ename 是可選的order by 子句,有些函數(shù)需要它,有些則不需要.依靠已排序數(shù)據(jù)的那些函數(shù),如:用于訪問結(jié)果集中前一行和后一行的LAG和LEAD,必須使用,其它函數(shù),如AVG,則不需要.在使用了任何排序的開窗函數(shù)時,該子句是強制性的,它指定了在計算分析函數(shù)時一組內(nèi)的數(shù)據(jù)是如何排序的。

1)FUNCTION子句

ORACLE提供了26個分析函數(shù),按功能分5類

分析函數(shù)分類

等級(ranking)函數(shù):用于尋找前N種查詢

開窗(windowing)函數(shù):用于計算不同的累計,如SUM,COUNT,AVG,MIN,MAX等,作用于數(shù)據(jù)的一個窗口上。

例:

sum(t.sal) over (order by t.deptno,t.ename) running_total,

sum(t.sal) over (partition by t.deptno order by t.ename) department_total

制表(reporting)函數(shù):與開窗函數(shù)同名,作用于一個分區(qū)或一組上的所有列

例:

sum(t.sal) over () running_total2,

sum(t.sal) over (partition by t.deptno ) department_total2

制表函數(shù)與開窗函數(shù)的關(guān)鍵不同之處在于OVER語句上缺少一個ORDER BY子句!

LAG,LEAD函數(shù):這類函數(shù)允許在結(jié)果集中向前或向后檢索值,為了避免數(shù)據(jù)的自連接,它們是非常用用的。

VAR_POP,VAR_SAMP,STDEV_POPE及線性的衰減函數(shù):計算任何未排序分區(qū)的統(tǒng)計值

2)PARTITION子句

按照表達式分區(qū)(就是分組),如果省略了分區(qū)子句,則全部的結(jié)果集被看作是一個單一的組。

3)ORDER BY子句

分析函數(shù)中ORDER BY的存在將添加一個默認的開窗子句,這意味著計算中所使用的行的集合是當前分區(qū)中當前行和前面所有行,沒有ORDER BY時,默認的窗口是全部的分區(qū)。在Order by子句后可以添加nulls last,如:order by comm desc nulls last   表示排序時忽略comm列為空的行。  

4)WINDOWING子句

用于定義分析函數(shù)將在其上操作的行的集合

Windowing子句給出了一個定義變化或固定的數(shù)據(jù)窗口的方法,分析函數(shù)將對這些數(shù)據(jù)進行操作

默認的窗口是一個固定的窗口,僅僅在一組的第一行開始,一直繼續(xù)到當前行,要使用窗口,必須使用ORDER BY子句。

根據(jù)2個標準可以建立窗口:數(shù)據(jù)值的范圍(RANGES)或與當前行的行偏移量。

5)Rang窗口

Range 5 preceding:將產(chǎn)生一個滑動窗口,他在組中擁有當前行以前5行的集合

ANGE窗口僅對NUMBERS和DATES起作用,因為不可能從VARCHAR2中增加或減去N個單元。

另外的限制是ORDER BY中只能有一列,因而范圍實際上是一維的,不能在N維空間中。

例:

avg(t.sal) over(order by t.hiredate asc range 100 preceding) 統(tǒng)計前100天平均工資

6)Row窗口

利用ROW分區(qū),就沒有RANGE分區(qū)那樣的限制了,數(shù)據(jù)可以是任何類型,且ORDER BY 可以包括很多列。

7)Specifying窗口

UNBOUNDED PRECEDING:這個窗口從當前分區(qū)的每一行開始,并結(jié)束于正在處理的當前行。

CURRENT ROW:該窗口從當前行開始(并結(jié)束)

Numeric Expression PRECEDING:對該窗口從當前行之前的數(shù)字表達式(Numeric Expression)的行開始,對RANGE來說,從從行序值小于數(shù)字表達式的當前行的值開始。

Numeric Expression FOLLOWING:該窗口在當前行Numeric Expression行之后的行終止(或開始),且從行序值大于當前行Numeric Expression行的范圍開始(或終止)

range between 100 preceding and 100 following:當前行100前,當前后100后

注意:分析函數(shù)允許你對一個數(shù)據(jù)集進排序和篩選,這是SQL從來不能實現(xiàn)的。除了最后的Order by子句之外,分析函數(shù)是在查詢中執(zhí)行的最后的操作集,這樣的話,就不能直接在謂詞中使用分析函數(shù),即不能在上面使用where或having子句。

Oracle分析函數(shù)實例(在scott用戶下模擬):

示例目的:顯示各部門員工的工資,并附帶顯示該部分的最高工資。

--顯示各部門員工的工資,并附帶顯示該部分的最高工資。

SELECT E.DEPTNO,
E.EMPNO,
E.ENAME,
E.SAL,
LAST_VALUE(E.SAL) 
OVER(PARTITION BY E.DEPTNO 
ORDER BY E.SAL ROWS 
--unbounded preceding and unbouned following

針對當前所有記錄的前一條、后一條記錄,也就是表中的所有記錄

--unbounded:不受控制的,無限的

--preceding:在...之前

--following:在...之后

BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) MAX_SAL
FROM EMP E;

運行結(jié)果:

結(jié)合上述的Oracle分析函數(shù)的應(yīng)用實例,我們不難看出Oracle分析函數(shù)的作用,在提高了運算效率的同時也提高了Oracle數(shù)據(jù)庫的查詢效率。在本站的Oracle教程中,對Oracle數(shù)據(jù)庫中的其他函數(shù)也有詳細的講解,想要深入學(xué)習(xí)的小伙伴可以結(jié)合教程學(xué)習(xí),使我們更好更方便地使用Oracle數(shù)據(jù)庫。

提交申請后,顧問老師會電話與您溝通安排學(xué)習(xí)

免費課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 涩涩免费视频 | 免费一级特黄欧美大片勹久久网 | 国产成人精品午夜视频' | 在线播放黄色片 | 在线国产一区二区三区 | 一级毛片在线不卡直接观看 | 国产美女丝袜黑色视频 | 免费女人视频 | 免费人成激情视频在线观看 | 青青草欧美 | 精品国产一区二区三区www | 欧美亚洲三级 | 国产成人18黄网站免费 | 欧美日韩国产高清 | 久久免费精品高清麻豆 | 男女午夜视频在线观看 | 男人影院在线 | 97夜夜 | 黄色一级黄色片 | 亚洲无线一二三四手机 | 99国产超薄丝袜足j在线观看 | 成人毛片免费 | 免费看一级黄色大片 | 国产伦精品一区二区三区免 | 欧美嫩freexxxhddvd | 人人爱国产| 九七在线视频 | 精品国产免费人成在线观看 | 成年人污视频 | 中国大陆毛片 | 精品国产影院 | 欧美一级片免费在线观看 | 好吊爽在线播放视频 | 2o2o天天看夜夜看狠狠看 | 性视频在线 | 最近免费手机中文字幕3 | 成人禁18视频在线观看 | 午夜爱爱毛片xxxx视频免费看 | 国产精品久久久久久久久免费观看 | 超97在线观看精品国产 | 黄色视屏免费在线观看 |