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 07 MySQL
MySQL连接查询你真的学会了吗?
Jun 02 MySQL
mysql 数据插入优化方法之concurrent_insert
Jul 01 MySQL
mysql配置SSL证书登录的实现
Sep 04 MySQL
MySQL 服务和数据库管理
Nov 11 MySQL
MySQL中varchar和char类型的区别
Nov 17 MySQL
关于MySQL中的 like操作符详情
Nov 17 MySQL
MySQL数据库索引的最左匹配原则
Nov 20 MySQL
MySQL分区路径子分区再分区
Apr 13 MySQL
MySQL脏读,幻读和不可重复读
May 11 MySQL
MySQL数据库 任意ip连接方法
May 20 MySQL
MySQL数据库查询之多表查询总结
Aug 05 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
剧场版动画《PSYCHO-PASS 3 FIRST INSPECTOR》3月27日日本上映!
2020/03/06 日漫
使用MaxMind 根据IP地址对访问者定位
2006/10/09 PHP
PHP分页显示制作详细讲解
2006/10/09 PHP
Linux(CentOS)下PHP扩展PDO编译安装的方法
2016/04/07 PHP
PHP正则表达式函数preg_replace用法实例分析
2020/06/04 PHP
PHP实现简单的计算器
2020/08/28 PHP
baidu博客的编辑友情链接的新的层窗口!经典~支持【FF】
2007/02/09 Javascript
prototype 中文参数乱码解决方案
2009/11/09 Javascript
jQuery 前的按键判断代码
2010/03/19 Javascript
Extjs中DisplayField的日期或者数字格式化扩展
2010/09/03 Javascript
ASP.NET jQuery 实例11 通过使用jQuery validation插件简单实现用户登录页面验证功能
2012/02/03 Javascript
JavaScript起点(严格模式深度了解)
2013/01/28 Javascript
删除javascript所创建子节点的方法
2015/05/21 Javascript
JS简单实现城市二级联动选择插件的方法
2015/08/19 Javascript
js document.getElementsByClassName的使用介绍与自定义函数
2016/11/25 Javascript
JavaScript程序设计高级算法之动态规划实例分析
2017/11/24 Javascript
微信小程序模拟cookie的实现
2018/06/20 Javascript
echarts设置图例颜色和地图底色的方法实例
2018/08/01 Javascript
Vue指令v-for遍历输出JavaScript数组及json对象的常见方式小结
2019/02/11 Javascript
vue cli3.0结合echarts3.0与地图的使用方法示例
2019/03/26 Javascript
AjaxFileUpload.js实现异步上传文件功能
2019/04/19 Javascript
JS实现骰子3D旋转效果
2019/10/24 Javascript
Angular利用HTTP POST下载流文件的步骤记录
2020/07/26 Javascript
[01:53]DOTA2超级联赛专访Zhou 五年职业青春成长
2013/05/29 DOTA
[00:32]2018DOTA2亚洲邀请赛Liquid出场
2018/04/03 DOTA
python生成日历实例解析
2014/08/21 Python
python列表生成式与列表生成器的使用
2018/02/23 Python
PyCharm代码格式调整方法
2018/05/23 Python
python3基于TCP实现CS架构文件传输
2018/07/28 Python
django项目简单调取百度翻译接口的方法
2019/08/06 Python
TensorFLow 不同大小图片的TFrecords存取实例
2020/01/20 Python
踩坑:pytorch中eval模式下结果远差于train模式介绍
2020/06/23 Python
Python sklearn中的.fit与.predict的用法说明
2020/06/28 Python
效能监察建议书
2014/05/19 职场文书
房屋授权委托书范本
2014/10/07 职场文书
我是特种兵观后感
2015/06/11 职场文书