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 root密码的重置方法
Apr 21 MySQL
Mysql基础之常见函数
Apr 22 MySQL
MySql新手入门的基本操作汇总
May 13 MySQL
mysql 如何获取两个集合的交集/差集/并集
Jun 08 MySQL
MySQL令人大跌眼镜的隐式转换
Aug 23 MySQL
MySQL8.0的WITH查询详情
Aug 30 MySQL
MySQL空间数据存储及函数
Sep 25 MySQL
MySQL对数据表已有表进行分区表的实现
Nov 01 MySQL
mysql insert 存在即不插入语法说明
Mar 25 MySQL
MySQL分区以及建索引的方法总结
Apr 13 MySQL
MySQL数据库安装方法与图形化管理工具介绍
May 30 MySQL
MySQL8.0 Undo Tablespace管理详解
Jun 16 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
关于js和php对url编码的处理方法
2014/03/04 PHP
javascript smipleChart 简单图标类
2011/01/12 Javascript
js 控制页面跳转的5种方法
2013/09/09 Javascript
js 触发select onchange事件代码
2014/03/20 Javascript
基于NodeJS的前后端分离的思考与实践(三)轻量级的接口配置建模框架
2014/09/26 NodeJs
js实现具有高亮显示效果的多级菜单代码
2015/09/01 Javascript
解析JavaScript面向对象概念中的Object类型与作用域
2016/05/10 Javascript
Bootstrap表格和栅格分页实例详解
2016/05/20 Javascript
jQuery判断是否存在滚动条的简单方法
2016/09/17 Javascript
浅谈在js传递参数中含加号(+)的处理方式
2016/10/11 Javascript
Angular JS数据的双向绑定详解及实例
2016/12/31 Javascript
javascript实现页面滚屏效果
2017/01/17 Javascript
jacascript DOM节点——元素节点、属性节点、文本节点
2017/04/18 Javascript
Node.js 使用命令行工具检查更新
2017/06/08 Javascript
JS+canvas实现的五子棋游戏【人机大战版】
2017/07/19 Javascript
JS中数据结构之栈
2019/01/01 Javascript
Swiper.js实现移动端元素左右滑动
2019/09/08 Javascript
JavaScript中的各种宽高属性的实现
2020/05/08 Javascript
Vue自定义多选组件使用详解
2020/09/08 Javascript
springboot+vue+对接支付宝接口+二维码扫描支付功能(沙箱环境)
2020/10/15 Javascript
解决Ant Design Modal内嵌Form表单initialValue值不动态更新问题
2020/10/29 Javascript
[46:48]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第三局
2016/02/25 DOTA
Python对excel文档的操作方法详解
2018/12/10 Python
三步实现Django Paginator分页的方法
2019/06/11 Python
利用CSS3的border-radius绘制太极及爱心图案示例
2016/05/17 HTML / CSS
工商学院毕业生自荐信
2013/11/12 职场文书
酒店出纳岗位职责
2013/12/29 职场文书
服装创业计划书范文
2014/02/05 职场文书
表扬稿范文
2015/01/17 职场文书
2015年母亲节活动总结
2015/02/10 职场文书
孔繁森观后感
2015/06/10 职场文书
校园音乐节目广播稿
2015/08/19 职场文书
员工给公司的建议书
2019/06/24 职场文书
血轮眼轮回眼特效 html+css
2021/03/31 HTML / CSS
Java org.w3c.dom.Document 类方法引用报错
2021/08/07 Java/Android
磁贴还没死, 微软Win11可修改注册表找回Win10开始菜单
2021/11/21 数码科技