分析函数语法格式:(<> 内的内容可以选择性省略)
FUNCTION_NAME(<参数>,…) OVER (<PARTITION BY 表达式,…> <ORDER BY 表达式 <ASC DESC> )
函数为聚合函数(AVG,SUM,COUNT)
- FUNCTION_NAME(<参数>,…) OVER (PARTITION BY 表达式,… ) – 分组求值
- FUNCTION_NAME(<参数>,…) OVER (ORDER BY 表达式 ) – 整体数据未做分组,先排序,在求累计求值
- FUNCTION_NAME(<参数>,…) OVER (PARTITION BY 表达式,… ORDER BY 表达式 ) – 先分组,按组内排序,对组内求累计求值
函数为排序函数(ROW_NUMBER(),RANK(),DENSE_RANK()):
- ROW_NUMBER:
ROW_NUMBER函数返回一个唯一的值,当碰到相同数据时,排名按照记录集中记录的顺序依次递增。 - RANK:
RANK函数返回一个唯一的值,当碰到相同的数据时,此时所有相同数据的排名是一样的,
同时会在最后一条相同记录和下一条不同记录的排名之间空出排名。 - DENSE_RANK
DENSE_RANK函数返回一个唯一的值,当碰到相同数据时,此时所有相同数据的排名都是一样的。
同时会在最后一条相同记录和下一条不同记录的排名之间不空出排名。
FUNCTION_NAME() OVER (ORDER BY 表达式 ) – 整体数据未做分组,按ORDER BY 的字段排名
FUNCTION_NAME() OVER (PARTITION BY 表达式,… ORDER BY 表达式 ) – 先分组,按组内排序,对组内进行排名
函数为位移函数(LEAD(列,参数), LAG(列,参数))
SELECT E.*,
LAG(E.SAL,1) OVER(ORDER BY E.SAL) AS 工资下移一位,
LEAD(E.SAL,1) OVER(ORDER BY E.SAL) AS 工资上移一位
FROM EMP E;