SQL窗口函数

窗口函数,也可以称为OLAP函数或分析函数。
它既可以分组,也可以排序,即兼具分组与排序功能,对于每一组能返回多行。
聚合函数是将某列多行中的值根据聚合规则返回(合并)为一行,对于每组只返回一行。

  1. 基本语法
    <窗口函数> over (partition by <列清单> order by <排序用列清单>)

  2. 大体分类:
    能够作为窗口函数的聚合函数:sum,avg,count,max,min;
    专用窗口函数:rank,dense_rank,row_number,lag,lead,first_value,last_value…

  3. 主要用于计算记录排序的函数
    rank():返回行号,会遇到相同位次的记录时,行号重复并间断;
    dense_rank():返回行号,会遇到相同位次的记录时,行号重复并不间断;
    row_number():返回行号,会遇到相同位次的记录时,行号不重复并不间断;
    SQL窗口函数_第1张图片

  4. 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。

  5. 注意:
    窗口函数是整个SQL语句最后被执行的部分,这意味着窗口函数是在SQL查询的结果集上进行的,因此不会受到Group By, Having,Where子句的影响;
    Order By子句对于诸如Row_Number(),Lead(),LAG()等函数是必须的,因为如果数据无序,这些函数的结果就没有任何意义;
    窗口函数只能存在于select子句中。

  6. 移动平均值
    SQL窗口函数_第2张图片
    SQL窗口函数_第3张图片

https://blog.csdn.net/qq_41805514/article/details/81772182

声明:菜鸟学习路上的总结,若有误请您指正,若侵权请您联系我,若转载请您附上链接。

你可能感兴趣的:(SQL窗口函数)