mysql从8.0之后开始支持窗口函数
作用
窗口函数:对数据进行分析处理,例如按成绩对学生进行排名,解决排名问题
使用语法
rank()函数:
SELECT *,rank() over (PARTITION BY 分组的属性名 ORDER BY 排序的属性名 DESC) rank
FROM test;
rank()为排序函数,partition by 类似于 group by的分组,但他不会像group by一样缩减行数,他能保持行数不变,如果不需要分组功能,也可以不写该函数;排序也可以按升序或者降序排
dense_rank()函数:
SELECT*,dense_rank() over (PARTITION BY 分组的属性名 ORDER BY 分组的列名 DESC) AS rank
FROM test;
row_number()函数:
SELECT *,row_number() over ( PARTITION BY 分组的属性名 ORDER BY 排序的属性名 DESC) AS rank
FROM test
这两种函数与rank()不同的地方在于出现并列的情况该如何处理:
rank():对于并列情况会出现
dense_rank():
row_number():忽略并列的情况