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的区别

窗口函数rank, dense_rank, row_number的区别

Oracle ---- 窗口函数