SQL 开窗函数

使用开窗函数的时候遇到一个问题 :分组的第一行如果不满足条件则为null,原来over()开窗函数如果使用了order by的时候默认窗口是第一行到当前行,因此会出现第一行为null的情况
 

如果over()没有使用order by 则窗口是分组内的第一行至最后一行

OVER():指定分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变而变化。
CURRENT ROW:当前行
n PRECEDING:往前n行数据
n FOLLOWING:往后n行数据
UNBOUNDED:起点,UNBOUNDED PRECEDING 表示从前面的起点, UNBOUNDED FOLLOWING表示到后面的终点
LAG(col,n,default_val):往前第n行数据
LEAD(col,n, default_val):往后第n行数据
NTILE(n):把有序分区中的行分发到指定数据的组中,各个组有编号,编号从1开始,对于每一行,NTILE返回此行所属的组的编号。注意:n必须为int类型
窗口就是分析函数分析时要处理的数据范围

开窗函数over()出现分组(partition by)子句时,

unbounded preceding即第一行是指表中一个分组里的第一行, unbounded following即最后一行是指表中一个分组里的最后一行;

开窗函数over()省略了分组(partition by)子句时, 

unbounded preceding即第一行是指表中的第一行, unbounded following即最后一行是指表中的最后一行。

而出现order by子句的时候,不一定要有窗口子句,但效果会很不一样,此时的窗口默认是当前组的第一行到当前行!

参考https://www.cnblogs.com/cjm123/p/8033892.html

猜你喜欢

转载自www.cnblogs.com/chungfenghuayu/p/11139945.html
今日推荐