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安装后默认自带数据库的作用详解
Apr 27 MySQL
详解MySQL集群搭建
May 26 MySQL
SQL实现LeetCode(175.联合两表)
Aug 04 MySQL
SQL注入详解及防范方法
Dec 06 MySQL
浅谈如何保证Mysql主从一致
Mar 13 MySQL
MySQL优化常用的19种有效方法(推荐!)
Mar 17 MySQL
MySQL插入数据与查询数据
Mar 25 MySQL
聊聊mysql都有哪几种分区方式
Apr 13 MySQL
Mysql 文件配置解析介绍
May 06 MySQL
mysql如何查询连续记录
May 11 MySQL
MySQL transaction事务安全示例讲解
Jun 21 MySQL
mysql全面解析json/数组
Jul 07 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对象类型判断
2008/08/27 PHP
推荐十款免费 WordPress 插件
2015/03/24 PHP
php批量删除超链接的实现方法
2015/10/19 PHP
PHP实现无限级分类(不使用递归)
2015/10/22 PHP
php调用云片网接口发送短信的实现方法
2017/10/25 PHP
thinkPHP5框架auth权限控制类与用法示例
2018/06/12 PHP
阻止JavaScript事件冒泡传递(cancelBubble 、stopPropagation)
2007/05/08 Javascript
js中的值类型和引用类型小结 文字说明与实例
2010/12/12 Javascript
jQuery.query.js 取参数的两点问题分析
2012/08/06 Javascript
js中事件的处理与浏览器对象示例介绍
2013/11/29 Javascript
js根据鼠标移动速度背景图片自动旋转的方法
2015/02/28 Javascript
jQuery实现按键盘方向键翻页特效
2015/03/18 Javascript
原生js编写焦点图效果
2016/12/08 Javascript
jQuery解析返回的xml和json方法详解
2017/01/05 Javascript
让div运动起来 js实现缓动效果
2017/07/06 Javascript
vue.js如何将echarts封装为组件一键使用详解
2017/10/10 Javascript
Angular实现的日程表功能【可添加及隐藏显示内容】
2017/12/27 Javascript
angular第三方包开发整理(小结)
2018/04/19 Javascript
Vue项目全局配置微信分享思路详解
2018/05/04 Javascript
基于vue-cli、elementUI的Vue超简单入门小例子(推荐)
2019/04/17 Javascript
JS匿名函数内部this指向问题详析
2019/05/10 Javascript
jquery validate 实现动态增加/删除验证规则操作示例
2019/10/28 jQuery
JavaScript获取当前url路径过程解析
2019/12/27 Javascript
JavaScript实现拖拽和缩放效果
2020/08/24 Javascript
详解vue组件之间的通信
2020/08/30 Javascript
Python通过正则表达式选取callback的方法
2015/07/18 Python
python 获取list特定元素下标的实例讲解
2018/04/09 Python
python 检查文件mime类型的方法
2018/12/08 Python
Python解决线性代数问题之矩阵的初等变换方法
2018/12/12 Python
python+openCV调用摄像头拍摄和处理图片的实现
2019/08/06 Python
浅谈Python3多线程之间的执行顺序问题
2020/05/02 Python
Python如何测试stdout输出
2020/08/10 Python
Python3使用 GitLab API 进行批量合并分支
2020/10/15 Python
numpy实现RNN原理实现
2021/03/02 Python
初中三好学生事迹材料
2014/01/13 职场文书
PostgreSQL事务回卷实战案例详析
2022/03/25 PostgreSQL