开窗函数,也叫OLAP(Online Anallytical Processing,联机分析处理),可以对数据库数据进行实时分析处理。
开窗函数本质上一种特殊的聚合函数。我们知道聚合函数是对满足条件的行 执行计算并返回一个值。而开窗函数是针对满足条件的行进行运算,结果会返回在所有参与计算的行上。
注意,因为where子句中不能使用窗口函数,而窗口函数本质上还是个聚合函数,所以,where子句中不能使用聚合函数。
聚合函数如sum.avg,count,max,min都可以作为聚合函数,除此之外,还有专用的开窗函数,如序号函数rank, dense_rank, row_number和前后函数lag、lead等。
区分开窗函数和普通聚合函数的关键字是OVER。当普通聚合函数sum等后面加上over()时,就表示对结果集中的所有行进行聚合运算,并把结果返回到每一行中。因此,开窗函数的运算是不改变原始数据的行数。
over关键字用来指定函数执行的窗口范围,如果后面括号中什么都不写,则意味着窗口包含满足条件的所有行,开窗函数基于所有行进行计算。
over中有三个参数可以用来设置窗口的范围:
(1)partition by:按照指定字段进行分区,开窗函数在不同的分区内分别执行。分区所依据的字段可以是多个,不同字段间使用逗号隔开。
(2)order by:按照指定字段进行排序,开窗函数将按照排序后的记录顺序进行编号和计算。可以和partition by子句配合使用,也可以单独使用。
(3)range|rows:当前分区的一个子集,用来定义子集的规则,通常用来作为滑动窗口使用。
关注微信公众号可查看全文并获取腾讯游戏的练习题。