分析函數是在SQL語句的彙總函數後面加上OVER()子句,將SQL查詢到的結果運行指定的彙總函數功能
一、OVER、PARTITION BY、ORDER BY
OVER子句格式:函數(arg1'...'arg n)OVER([PARITION BY<...>][ORDER BY<...>])
在SQL語句的結果集上,依OVER子句內指定動作,執行OVER前面的函數運算,並將結果返回當前資料列,OVER是分析函數的必要關鍵字,用來指定運作方式以及範圍
- PARTITION BY:結果集分組之依據,在OVER子句加入PARTITION BY<欄位>表示要把SQL語句查詢結果再集依PRATITION BY指定欄位分組進行彙總,此時SQL語句的彙總函數前的其他欄位被當作一般欄位,而彙總結果則會返回到資料列上
- ORDER BY:結果集排序之依據,OVER BY 子句與WHERE之後,主查詢的ORDER BY 子句對象不同,分析函數ORDER BY子句通用與法
ORDER BY <sql_expr>[ASC or DESC] NULLS [FIRST or LAST]
二、ROW_NUMBER、RANK、DENSE_RANK
這三個函數需要根據資料列排序結果,代表順序的整數值分配到該資料列,ROW_NUMBER()是將運算結果順序號碼返回至分組資料列。
三、LEAD、LAG
- LEAD函數用來計算排序後的下一列的資料欄位,並將值返回到當前列
LEAD(,,) OVER(analytic_clause>)
- 代表要從下一列開始計算的欄位表達式
- 是相對於當前列的前導列的索引值,預設為1
- 當指向分區範圍外的列時要返回的值
相對的LAG函數是用來計算排序後的上一列欄位,並將值返回到當前列。
四、FIRST_VALUE、LAST_VALUE
FIRST_VALUE() OVER (<analytic_clause>)
LAST_VALUE() OVER (<analytic_clause>)
- FIRST_VALUE函數返回依OVER子句的ORDER BY 指定欄位排序後的首筆資料列
- LAST_VALUE函數返回依OVER子句的ORDER BY 指定欄位排序後的末筆資料列
五、MDEDIAN、STDDEV、VARIANCE
這三個統計應用函數,都是針對一組數目進行指定計算
MDEDIAN是算中位數,STDDEV算標準差、VARIANCE算變異數