摘要
本文主要介绍窗口函数。第一部分介绍窗口函数定义,第二部分介绍窗口函数的语法,包括窗口函数以及over子句。其中窗口函数部分介绍了专用窗口函数、聚合函数、排序函数ntitile以及偏移函数lean与lag。over子句部分介绍partition by,order by 及rows三个参数,在partition by 和order by部分介绍了他们和group by 以及group by 子句、order by子句的区别。每一个参数均举了例子说明。第三部分对内容作了总结。第四部分是一些SQL的练习题,来源于拉钩数据分析训练营教学笔记。
1 思维导图
2 窗口函数定义
窗口函数也称为OLAP(Online Analytical Processing)函数, 意思是可以对数据库数据进行实时分析分析处理的函数。
窗口函数主要用来处理相对复杂的报表统计分析场景。举个例子,现在有三个月的销售数据,如下表所示:
如何在每个月实现所有月份销售额的统计,如下表:
再比如,如何实现移动累积销售额的计算?比如我要计算最近三个月的累积销售额。
以上这些需求可以通过窗口函数来实现。
3 窗口函数语法
<窗口函数> OVER子句
可以看到,窗口函数的语法包含两个大的部分,分别是:<窗口函数>、over 子句。现在分别对这两个概念进行说明。
3.1 窗口函数
能够作为窗口函数使用的函数有以下几种:
- 专用窗口函数
1) RANK() :计算排序时,如果存在相同位次的记录,则会跳过该记录。例如有2条记录的值为100,1条记录的值为200,对这3条记录进行排序时,结果为:1,1,3
2)DENSE_RANK():计算排序时,即使存在相同位次的记录,也不会跳过之后的位次。例如有2条记录的值为100,1条记录的值为200,对这3条记录进行排序时,结果为:1,1,2
3)row_number():按顺序计算排序,对这3条记录进行排序时,结果为:1,2,3
2. 聚合函数
SUM、AVG、COUNT、MAX、MIN等。窗口函数的聚合方式和GROUP BY的聚合方式有些区别,在后面会详细说明。
3. 其他常用函数:
1)排序函数:ntitle(n)
2)排序函数:ntitle(n)
运用了窗口函数的语法如下:
RANK()