mysql窗口函数rank() over、dense_rank() over、row_number() over 使用心得
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql窗口函数rank() over、dense_rank() over、row_number() over 使用心得相关的知识,希望对你有一定的参考价值。
参考技术A一枚小产品的学习记录
在做sql练习题时了解到的新函数,做个简要的记录,若有不严谨的地方,请指正。
mysql 8.0以上版本才支持窗口函数
以下是个人总结
另外:over(partition by字段1 order by 字段2)中的partition by 字段1 是可以省略的但是order by 字段2 不可省略
详细演示见下文:
本文内使用到的建表、插入数据sql 可在我写的sql面试50题的第一篇文章内找到.
按各科成绩进行排序,并显示排名
#rank()over()的使用
#执行结果如下
#rank()over()的使用,不使用partition by的效果
#执行结果如下
#row_number()over()的使用
#执行结果如下
#dense_rank()over()的使用
#执行结果如下
#****与group by 共同使用
#对学生总成绩进行从大到小排序
#执行结果如下
窗口函数简单介绍
窗口函数
功能
对数据进行实时分析处理
eg:分组排名并取出各组的前几名或者第几名
语法:
select 窗口函数 over(partition by 用于分组的列名 order by 用于排序的列名 ) from 表名
三种窗口函数区别
RANK()
-
在rank()函数,如果有并列情况,会占用下一个名次的位置,比如,成绩为100的学生有三个并列第一,那么99分的学生是第二名,通过rank()函数,名次是:1、1、1、4:
DENSE_RANK()
-
在dense_rank()函数中,如果有并列的情况,不会占用下一个名次。比如,成绩为100的学生有三个并列第一,那么99分的学生是第二名,通过rank()函数,名次是:1、1、1、2:
ROW_NUMBER()
-
在row_number()函数中,直接忽略并列的情况:
以上是关于mysql窗口函数rank() over、dense_rank() over、row_number() over 使用心得的主要内容,如果未能解决你的问题,请参考以下文章
MySQL8.0窗口函数之排名函数(rankdense_rank)的使用
MySQL8.0窗口函数之排名函数(rankdense_rank)的使用
MySQL - 排序函数 Rank() Over()Dense_rank() Over()Row_number() Over()
窗口函数rank, dense_rank, row_number的区别