大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

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

詳解Oracle分析函數(shù)

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

分析函數(shù)是Oracle專門用于解決復(fù)雜報表統(tǒng)計需求的功能強(qiáng)大的函數(shù),它可以在數(shù)據(jù)中進(jìn)行分組然后計算基于組的某種統(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ù)進(jìn)行計算,返回多行。

2.不需要進(jìn)行多表聯(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ù)可以是表達(dá)式,例如:sum(sal+comm)

over是一個關(guān)鍵字,用于標(biāo)識分析函數(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ù)時,該子句是強(qiáng)制性的,它指定了在計算分析函數(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子句

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

3)ORDER BY子句

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

4)WINDOWING子句

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

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

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

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

5)Rang窗口

Range 5 preceding:將產(chǎn)生一個滑動窗口,他在組中擁有當(dāng)前行以前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:這個窗口從當(dāng)前分區(qū)的每一行開始,并結(jié)束于正在處理的當(dāng)前行。

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

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

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

range between 100 preceding and 100 following:當(dāng)前行100前,當(dāng)前后100后

注意:分析函數(shù)允許你對一個數(shù)據(jù)集進(jìn)排序和篩選,這是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

針對當(dāng)前所有記錄的前一條、后一條記錄,也就是表中的所有記錄

--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ù)也有詳細(xì)的講解,想要深入學(xué)習(xí)的小伙伴可以結(jié)合教程學(xué)習(xí),使我們更好更方便地使用Oracle數(shù)據(jù)庫。

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

免費課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 国产一区二区免费不卡在线播放 | 免费观看一级欧美在线视频 | 日韩视频一 | 欧美成人视 | 99在线国产视频 | 91久久国产 | 免费高清成人啪啪网站 | 中文字幕在线观看一区二区 | 成人yyyy | 日韩毛片网 | 亚洲你我色 | 日日干日日草 | 久久精品成人 | 激情都市久久爱 | 久久中文亚洲国产 | 日本高清一级做a爱过程免费视频 | 青草免费免费观看视频在线 | 狠狠操大逼 | aaa色| 欧美精品h在线播放 | 久操香蕉| 亚洲国产综合专区在线播一一 | 国产精品成人第一区 | 国产欧美亚洲精品综合在线 | 多多多色麻豆 | 超碰v| 欧美日韩一级黄色片 | 日韩欧美小视频 | 一级毛片不卡 | 这里只有精品视频在线观看 | 久久一区二区三区精品 | 亚洲精品国产精品乱码视色 | 亚州欧美| 国产亚洲精品国产第一 | 婷婷激情在线视频 | 免费播放欧美毛片欧美aaaaa | 中文字幕色婷婷在线精品中 | 日本欧美一区二区三区不卡视频 | 一级女人18毛片免费 | 亚洲综合一区二区三区四区 | 国产成人精品免费午夜 |