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 相关文章推荐
Idea连接MySQL数据库出现中文乱码的问题
Apr 14 MySQL
详解MySQL主从复制及读写分离
May 07 MySQL
Mysql中 unique列插入重复值该怎么解决呢
May 26 MySQL
MySQL删除和插入数据很慢的问题解决
Jun 03 MySQL
Mysql中存储引擎的区别及比较
Jun 04 MySQL
浅谈MySQL next-key lock 加锁范围
Jun 07 MySQL
MySQL系列之十一 日志记录
Jul 02 MySQL
MySQL里面的子查询的基本使用
Aug 02 MySQL
MySQL RC事务隔离的实现
Mar 31 MySQL
MySQL表锁、行锁、排它锁及共享锁的使用详解
Apr 02 MySQL
MySQL创建管理RANGE分区
Apr 13 MySQL
Mysql 如何合理地统计一个数据库里的所有表的数据量
Apr 18 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强制运行广告的方法
2014/12/01 PHP
php将数组转换成csv格式文件输出的方法
2015/03/14 PHP
PHP基于单例模式实现的mysql类
2016/01/09 PHP
Jquery中Ajax 缓存带来的影响的解决方法
2011/05/19 Javascript
Jquery判断$("#id")获取的对象是否存在的方法
2013/09/25 Javascript
js实现点击向下展开的下拉菜单效果代码
2015/09/01 Javascript
AngularJS过滤器filter用法分析
2016/12/11 Javascript
浅析BootStrap中Modal(模态框)使用心得
2016/12/24 Javascript
Bootstrap实现渐变顶部固定自适应导航栏
2020/08/27 Javascript
javaScript手机号码校验工具类PhoneUtils详解
2017/12/08 Javascript
简单明了区分escape、encodeURI和encodeURIComponent
2018/05/26 Javascript
js replace 全局替换的操作方法
2018/06/12 Javascript
微信小程序 MinUI组件库系列之badge徽章组件示例
2018/08/20 Javascript
迅速了解一下ES10中Object.fromEntries的用法使用
2019/03/05 Javascript
VSCode使用之Vue工程配置eslint
2019/04/30 Javascript
nodejs语言实现验证码生成功能的示例代码
2019/10/13 NodeJs
实现一个Vue自定义指令懒加载的方法示例
2020/06/04 Javascript
[05:45]Ti4观战指南(下)
2014/07/07 DOTA
python通过openpyxl生成Excel文件的方法
2015/05/12 Python
Python基于Socket实现的简单聊天程序示例
2017/08/05 Python
python实现祝福弹窗效果
2019/04/07 Python
Python如何使用队列方式实现多线程爬虫
2020/05/12 Python
英国时尚饰品和发饰购物网站:Claire’s
2017/07/04 全球购物
大学毕业生通用求职信
2013/09/28 职场文书
考核评语大全
2014/04/29 职场文书
骨干教师考核评语
2014/12/31 职场文书
学习保证书
2015/01/17 职场文书
惊涛骇浪观后感
2015/06/05 职场文书
2015年社区反邪教工作总结
2015/10/14 职场文书
教师学习心得体会范文
2016/01/21 职场文书
使用Html+Css实现简易导航栏功能(导航栏遇到鼠标切换背景颜色)
2021/04/07 HTML / CSS
JS不要再到处使用绝对等于运算符了
2021/04/30 Javascript
Python趣味挑战之实现简易版音乐播放器
2021/05/28 Python
利用Python第三方库实现预测NBA比赛结果
2021/06/21 Python
python实现简单石头剪刀布游戏
2021/10/24 Python
Python中npy和mat文件的保存与读取
2022/04/24 Python