第 12 章 分析函數
12.1 分析函數如何工作
語法
FUNCTION_NAME(<參數>,…)
OVER
(<PARTITION BY 表達式,…> <ORDER BY 表達式 <ASC | DESC> <NULLS FIRST | NULLS LAST>> <WINDOWING子句>)
PARTITION子句
ORDER BY子句
WINDOWING子句
缺省時相當於RANGE UNBOUNDED PRECEDING
1. 值域窗(RANGE WINDOW)
RANGE N PRECEDING
僅對數值或日期類型有效,選定窗為排序後當前行之前,某列(即排序列)值大於/小於(當前行該列值 –/+ N)的所有行,因此與ORDER BY子句有關系。
2. 行窗(ROW WINDOW)
ROWS N PRECEDING
選定窗為當前行及之前N行。
還可以加上BETWEEN AND 形式,例如RANGE BETWEEN m PRECEDING AND n FOLLOWING
函數
AVG(<distinct | all> expr)
一組或選定窗中表達式的平均值
CORR(expr, expr)
即COVAR_POP(exp1,exp2) / (STDDEV_POP(expr1) * STDDEV_POP(expr2)),兩個表達式的互相關,-1(反相關) ~ 1(正相關),0表示不相關
COUNT(<distinct> <*> <expr>)
計數
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是當超出選定窗范圍時的返回值(如最後行不存在之前行)
MAXexpr)
最大值
MIN(expr)
最小值
NTILE(expr)