MySQL中rank() over、dense_rank() over、row_number() over用法介绍


Posted in MySQL onMarch 23, 2022

前言

本篇介绍的三个函数均MySQL 8.x 以上版本,8.x以下版本会报语法错误,属于正常现象。

MySQL 8.x 实际上就是 MySQL 5.8x,大概是为了通过更大版本型号数字,证明自己比友商先进吧。

你可以通过 mysql --version (cmd命令)或者 select version() (sql语句)查看MySQL版本型号。

LeetCode.178题(https://leetcode-cn.com/problems/rank-scores/

MySQL中rank() over、dense_rank() over、row_number() over用法介绍

上述的这道题,如果不使用本次用到的函数的答案如下,也就是说,如果你的MySQL无法使用本篇中的函数,可以通过下面的语法逻辑做替换。

SELECT t1.Score as Score, ( SELECT COUNT(DISTINCT t2.Score) FROM Scores t2 WHERE t2.Score >= t1.Score ) AS `Rank` 
FROM Scores t1 ORDER BY t1.Score DESC

rank() over(业务逻辑)

作用:查出指定条件后的进行排名,条件相同排名相同,排名间断不连续。

说明:例如学生排名,使用这个函数,成绩相同的两名是并列,下一位同学空出所占的名次。即:1 1 3 4 5 5 7

SELECT id, name, score, rank() over(ORDER BY score DESC) AS 'rank' FROM student

MySQL中rank() over、dense_rank() over、row_number() over用法介绍

dense_rank() over(业务逻辑)

作用:查出指定条件后的进行排名,条件相同排名相同,排名间断不连续。

说明:和rank() over 的作用相同,区别在于dense_rank() over 排名是密集连续的。例如学生排名,使用这个函数,成绩相同的两名是并列,下一位同学接着下一个名次。即:1 1 2 3 4 5 5 6

SELECT id, name, score, dense_rank() over(ORDER BY score DESC) AS 'rank' FROM student

MySQL中rank() over、dense_rank() over、row_number() over用法介绍

row_number() over(业务逻辑)

作用:查出指定条件后的进行排名,条件相同排名也不相同,排名间断不连续。

说明:这个函数不需要考虑是否并列,即使根据条件查询出来的数值相同也会进行连续排序。即:1 2 3 4 5 6

SELECT id, name, score, row_number() over(ORDER BY score DESC) AS 'rank' FROM student

 

MySQL中rank() over、dense_rank() over、row_number() over用法介绍

后记

函数中的业务逻辑可以是复杂的,不局限于 ORDER BY,也可以加 PARTITION BY。

### 分班级排名
SELECT id, name, score, class, row_number() over(PARTITION BY class ORDER BY score DESC) AS 'rank' 
FROM student

MySQL中rank() over、dense_rank() over、row_number() over用法介绍

 到此这篇关于MySQL中rank() over、dense_rank() over、row_number() over用法介绍的文章就介绍到这了,更多相关MySQL rank() over dense_rank() over row_number() over内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
MySQL主从搭建(多主一从)的实现思路与步骤
May 13 MySQL
MySQL之PXC集群搭建的方法步骤
May 25 MySQL
MySQL 使用索引扫描进行排序
Jun 20 MySQL
MySQL系列之四 SQL语法
Jul 02 MySQL
MySQL约束超详解
Sep 04 MySQL
MyBatis 动态SQL全面详解
Oct 05 MySQL
浅谈如何保证Mysql主从一致
Mar 13 MySQL
MySQL中rank() over、dense_rank() over、row_number() over用法介绍
Mar 23 MySQL
进阶篇之linux环境下安装MySQL数据库
Apr 09 MySQL
mysql中如何用命令创建联合唯一索引
Apr 20 MySQL
sql注入报错之注入原理实例解析
Jun 10 MySQL
MySQL count(*)统计总数问题汇总
Sep 23 MySQL
简单聊一聊SQL注入及防止SQL注入
Mar 23 #MySQL
浅谈MySQL中的六种日志
Mar 23 #MySQL
WINDOWS 64位 下安装配置mysql8.0.25最详细的教程
实战 快速定位MySQL的慢SQL
关于MySQL临时表为什么可以重名的问题
将MySQL的表数据全量导入clichhouse库中
Mar 21 #MySQL
MySQL分区表管理命令汇总
Mar 21 #MySQL
You might like
php中使用Akismet防止垃圾评论的代码
2011/06/10 PHP
PHP中strpos、strstr和stripos、stristr函数分析
2016/06/11 PHP
js使用正则实现ReplaceAll全部替换的方法
2014/07/18 Javascript
JavaScript设计模式之抽象工厂模式介绍
2014/12/28 Javascript
jQuery实现的点赞随机数字显示动画效果(附在线演示与demo源码下载)
2015/12/31 Javascript
javascript计时器编写过程与实现方法
2016/02/29 Javascript
jQuery实现每隔几条元素增加1条线的方法
2016/06/27 Javascript
Three.js学习之几何形状
2016/08/01 Javascript
jQuery中Nicescroll滚动条插件的用法
2016/11/10 Javascript
jQuery获取this当前对象子元素对象的方法
2016/11/29 Javascript
浅谈Angular的$q, defer, promise
2016/12/20 Javascript
three.js中3D视野的缩放实现代码
2017/11/16 Javascript
完美解决mui框架off-canvas侧滑超出部分隐藏无法滚动的问题
2018/01/25 Javascript
详解ES6中的Map与Set集合
2019/03/22 Javascript
基于vue实现一个禅道主页拖拽效果
2019/05/27 Javascript
前端Electron新手入门教程详解
2019/06/21 Javascript
解决Antd 里面的select 选择框联动触发的问题
2020/10/24 Javascript
Python3实现将文件归档到zip文件及从zip文件中读取数据的方法
2015/05/22 Python
python实现随机森林random forest的原理及方法
2017/12/21 Python
面向初学者的Python编辑器Mu
2018/10/08 Python
如何利用Python分析出微信朋友男女统计图
2019/01/25 Python
django admin 根据choice字段选择的不同来显示不同的页面方式
2020/05/13 Python
使用Python防止SQL注入攻击的实现示例
2020/05/21 Python
python中K-means算法基础知识点
2021/01/25 Python
python 多线程爬取壁纸网站的示例
2021/02/20 Python
毕业生求职信的经典写法
2014/01/31 职场文书
大学理论知识学习自我鉴定
2014/04/28 职场文书
团支部推优材料
2014/05/21 职场文书
经理任命书模板
2014/06/06 职场文书
咖啡店创业计划书范文
2014/09/15 职场文书
2015年七夕爱情寄语
2015/03/24 职场文书
2015年食品安全宣传周活动总结
2015/07/09 职场文书
迎新生欢迎词2015
2015/07/16 职场文书
婚宴新郎致辞
2015/07/28 职场文书
解析目标检测之IoU
2021/06/26 Python
MySQL Server层四个日志的实现
2022/03/31 MySQL