oracle分析函數學習

jopen 12年前發布 | 4K 次閱讀 Hotmail

一、分析函數的語法</span>

FUNCTION_NAME<參數>,…)

OVER<PARTITION BY 表達式,…> <ORDER BY 表達式 <ASC | DESC> <NULLS FIRST | NULLS LAST>> <WINDOWING子句>

 

1FUNCTION_NAME<參數>,…)

在后面介紹各個分析函數的用途。

2OVER關鍵字

over只是一個關鍵字,標識這是一個分析函數。

3PARTITION子句

分析函數以什么條件分組計算,相當于group by的作用,但是分析函數不會把結果集聚合,而是以原始記錄方式顯示每行的計算結果。缺省該子句表示整個記錄集作為一組計算。

4ORDER BY子句

分析函數中的order by 子句和標準SQL中的order by 子句類似,表示組內以什么條件排序,ascdesc表示排序的方向,nulls firstnulls last表示空值的排序位置。

5WINDOWING子句

默認的窗口是:當有ORDER BY子句的時候表示從當前分區的第一行到當前行;當沒有ORDER BY子句的時候表示整個分組。

窗口函數有2種方式,但是必須有ORDER BY子句時才能使用窗口函數。

a、  值域窗(RANGE WINDOW),邏輯偏移

       RANGE 表達式 PRECEDING ,當前組中當前行的前N行開始到當前行的記錄集。排序列和表達式都只能是數值或間隔日期,選定窗為排序后當前行之前,排序列(使用這種窗口函數時只能有一個排序列)值大于/小于(當前行該列值 /+表達式)的所有行,因此與ORDER BY子句有關系。是以排序列計算窗口范圍。

       以下2種情況可以有多個排序列:

       RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW.

       RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING.

b、  行窗(ROW WINDOW),物理偏移

ROWS 表達式 PRECEDING,表達式必須是一個正的數字類型。以排序的結果順序計算偏移當前行的起始行。

除了上面的PRECEDING關鍵字外,還有CURRENT ROW表示當前行,FOLLOWING表示當前行之后N行,還可以用BETWEEN AND 形式,例如RANGE BETWEEN m PRECEDING AND n FOLLOWING表示前m行到后n行的記錄集計算。如果不是BETWEEN AND形式,則oracle會認為窗口函數只寫了起始行,而當前行默認是終止行。所以FOLLOWING關鍵字只能用在BETWEEN AND中。

 

二、分析函數的簡介

</tr>

</tbody> </table>

 

三、聚合函數的特殊關鍵字KEEP

聚合函數 MIN, MAX, SUM, AVG, COUNT, VARIANCE, STDDEV, 當使用 KEEP 時和DENSE_RANK FIRST /DENSE_RANK LAST一起使用,獲取一組中排名第一或者排名最后的記錄。必須有order by 子句用來排序。后面也可以接over()分析函數部分。

Mincol2keepdense_rank first order by col1)保留按col1排名第一的col2的最小值。

Mincol2keepdense_rank first order by col1over (partition by col3) col3分組保留按col1排名各組第一的col2的最小值。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!

推薦閱讀

oracle分析函數學習

一、分析函數的語法 FUNCTION_NAME ( < 參數 > ,…) OVER ( <PARTITION BY 表達式,… > <ORDER BY 表達式 <ASC | DESC> <NUL...

oracle 學習

Oracle必讀好書推薦 -------------------------------------------------------------------------- tkyte的書 1...

Oracle常用函數(整理)

. ASCII 返回與指定的字符對應的十進制數; SQL> select ascii(A) A,ascii(a) a,ascii(0) zero,ascii( ) space from dual...

ORACLE學習筆記

數據庫全名是: ORACLEDB ; Net 本地服務名: ORACLEDB01 ;用戶名: haha ;密碼 haha 。 在數據庫里有一個測試用的表: student 一:查詢語句 sele...

AVG

<distinct | all> expr

一組或選定窗中表達式的平均值,添加distinct去重取平均值。

CORR

expr expr

COVAR_POPexp1exp2 / STDDEV_POPexpr1 * STDDEV_POPexpr2)),兩個表達式的互相關,-1(反相關) ~ 1(正相關),表示不相關

COUNT

<distinct> <*> <expr>

計數,添加distinct去重計數。

COVAR_POP

expr expr

總體協方差

COVAR_SAMP

expr expr

樣本協方差

CUME_DIST

累積分布,即行在組中的相對位置,返回0 ~ 1

DENSE_RANK

行的相對排序(與ORDER BY搭配),相同的值具有一樣的序數(NULL計為相同),并不留空序數

FIRST_VALUE

一個組的第一個值

LAG

expr, <offset><default>

訪問之前的行,OFFSET是缺省為1 的正數,表示相對行數,DEFAULT是當超出選定窗范圍時的返回值(如第一行不存在之前行)

LAST_VALUE

一個組的最后一個值

LEAD

expr<offset><default>

訪問之后的行,OFFSET是缺省為1 的正數,表示相對行數,DEFAULT是當超出選定窗范圍時的返回值(如最后行不存在之前行)

MAX

(expr

最大值

MIN

expr

最小值

NTILE

expr

按表達式的值和行在組中的位置編號,如表達式為4,則組分4份,分別為1 ~ 4的值,而不能等分則多出的部分在值最小的那組

PERCENT_RANK

類似CUME_DIST1/(行的序數 - 1

RANK

相對序數,允許并列,并空出隨后序號

RATIO_TO_REPORT

expr

表達式值 / SUM(表達式值),當前值占當前分組的比例。

REGR_ xxxx

expr expr

線性回歸函數

ROW_NUMBER

排序的組中行的偏移

STDDEV

expr

標準差

STDDEV_POP

expr

總體標準差

STDDEV_SAMP

expr

樣本標準差

SUM

expr

合計

VAR_POP

expr

總體方差

VAR_SAMP

expr

樣本方差

VARIANCE

expr

方差

  • sesese色