含义:窗口函数也叫OLAP函数(Online Anallytical Processing,联机分析处理),可以对数据进行实时分析处理。
那么在MySQL中,窗口函数主要用来解决什么问题呢?
基本语法
select 窗口函数 over (partition by 分组列名, order by 排序列名)as 别名
窗口函数的分类
下面我们针对常用的窗口函数进行用法讲解。
窗口函数的用法
rank()函数
#按班级分类,将成绩降序排序SELECT*,rank() over ( PARTITION BY 班级 ORDER BY 成绩 DESC) AS rank FROM class;
说明
总结
dense_rank()
说明
用法与rank()函数相同。
区别
当排序字段取值相同时,在rank()函数中,如果有并列情况,会占用下一个名次的位置,比如,成绩为100的学生有三个并列第一,那么99分的学生是第二名,通过rank()函数,名次分别为1,1,1,4;而在dense_rank()函数中,如果有并列的情况,不会占用下一个名词,名次分别为1,1,1,2;
row_number()
说明
用法与rank()函数相同。
区别
当排序字段取值相同时,在rank()函数中,如果有并列的情况,会占用下一个名次的位置,比如,成绩为100的学生有三个并列第一,那么99分的学生是第二名,通过rank()函数,名次分别为1,1,1,4;而在row_number()函数中,会忽略并列的情况,名次分别为1,2,3,4;
注:窗口函数中如果省略partition by,则结果不进行分组,以整个表为范围,也就是窗口为整个表;如果省略order by 则不进行排序,窗口函数一般写在select子句中;
①聚合函数是将多条记录聚合为一条,例如对整体求最大值/最小值/均值等;而窗口函数中每条记录都会执行,执行完记录数不变。
②聚合函数也可以用于窗口函数。