SQL常用窗口函数
窗口函数格式
函数名(列名) OVER(partition by 列名 order by列名)
执行顺序
在使用 row_number() over()函数时候,over()里头的分组以及排序的执行,晚于where、group by、order by 的执行。
常用窗口函数
1. 聚合窗口函数
常见的聚合函数可以做窗口函数,如AVG()、SUM()、COUNT()、MAX()以及MIN()等。
2. 排序窗口函数
row_number()
对相等的值不进行区分,其实就是行号,相等的值对应的排名不同,序号从1到n连续。
rank()
相等的值排名相同,但若有相等的值,则序号从1到n不连续。如果有两个人都排在第3名,则没有第4名。
dense_rank()
对相等的值排名相同,但序号从1到n连续。如果有两个人都排在第一名,则排在第2名(假设仅有1个第二名)的人是第3个人。
ntile(n)
可以看作是把有序的数据集合平均分配到指定的数量n的桶中,将桶号分配给每一行,排序对应的数字为桶号,序号从1到n连续。如果不能平均分配,则较小桶号的桶分配额外的行,并且各个桶中能放的数据条数最多相差1。
3. 取值窗口函数
用于返回指定位置上的数据行,包括FIRST_VALUE()、LAST_VALUE()、LAG()、LEAD()、NTH_VALUE()
lag(字段名称,偏移量, 默认值)
向下偏移
lead(字段名称,偏移量, 默认值)
向上偏移