窗口函数,也可以称为OLAP函数或分析函数。
它既可以分组,也可以排序,即兼具分组与排序功能,对于每一组能返回多行。
聚合函数是将某列多行中的值根据聚合规则返回(合并)为一行,对于每组只返回一行。
-
基本语法
<窗口函数> over (partition by <列清单> order by <排序用列清单>) -
大体分类:
能够作为窗口函数的聚合函数:sum,avg,count,max,min;
专用窗口函数:rank,dense_rank,row_number,lag,lead,first_value,last_value… -
主要用于计算记录排序的函数
rank():返回行号,会遇到相同位次的记录时,行号重复并间断;
dense_rank():返回行号,会遇到相同位次的记录时,行号重复并不间断;
row_number():返回行号,会遇到相同位次的记录时,行号不重复并不间断;
-
Lead()和LAG()函数
LAG()和Lead(),这两个分析函数经过Order By子句排序后,可以在当前行访问上N行(LAG)或下N行(LEAD)的数据。
LAG (scalar_expression [,offset] [,default]) OVER ( [ partition_by_clause ] order_by_clause )
读取的数据,偏移多少行,如果没有值默认值是多少。
eg:lead(value,1,99) over (order by value) --向下取一行,没有值时默认为99。 -
注意:
窗口函数是整个SQL语句最后被执行的部分,这意味着窗口函数是在SQL查询的结果集上进行的,因此不会受到Group By, Having,Where子句的影响;
Order By子句对于诸如Row_Number(),Lead(),LAG()等函数是必须的,因为如果数据无序,这些函数的结果就没有任何意义;
窗口函数只能存在于select子句中。 -
移动平均值
声明:菜鸟学习路上的总结,若有误请您指正,若侵权请您联系我,若转载请您附上链接。