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执行过程以及顺序
May 12 MySQL
详解MySQL中的主键与事务
May 27 MySQL
MySQL 使用索引扫描进行排序
Jun 20 MySQL
python中的mysql数据库LIKE操作符详解
Jul 01 MySQL
Mysql案例刨析事务隔离级别
Sep 25 MySQL
mysql中整数数据类型tinyint详解
Dec 06 MySQL
详解MySQL的主键查询为什么这么快
Apr 03 MySQL
解决Mysql报错 Table 'mysql.user' doesn't exist
May 06 MySQL
MySQL 逻辑备份 into outfile
May 15 MySQL
MySQL中的全表扫描和索引树扫描
May 15 MySQL
MySql如何将查询的出来的字段进行转换
Jun 14 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
mysql_fetch_assoc和mysql_fetch_row的功能加起来就是mysql_fetch_array
2007/01/15 PHP
在VS2008中编译MYSQL5.1.48的方法
2010/07/03 PHP
php实现基于微信公众平台开发SDK(demo)扩展的方法
2014/12/22 PHP
PHP Streams(流)详细介绍及使用
2015/05/12 PHP
php 参数过滤、数据过滤详解
2015/10/26 PHP
PHP whois查询类定义与用法示例
2019/04/03 PHP
EXTJS FORM HIDDEN TEXTFIELD 赋值 使用value不好用的问题
2011/04/16 Javascript
js的.innerHTML = ""IE9下显示有错误的解决方法
2013/09/16 Javascript
用jquery等比例控制图片宽高的具体实现
2014/01/28 Javascript
jQuery表单美化插件jqTransform使用详解
2015/04/12 Javascript
Javascript之BOM(window对象)详解
2016/05/25 Javascript
jQuery 中ajax异步调用的四种方式
2016/06/28 Javascript
让div运动起来 js实现缓动效果
2017/07/06 Javascript
node.js基于express使用websocket的方法
2017/11/09 Javascript
对vue事件的延迟执行实例讲解
2018/08/28 Javascript
vue实现多组关键词对应高亮显示功能
2019/07/25 Javascript
[01:20]DOTA2上海特级锦标赛现场采访:谁的ID最受青睐
2016/03/25 DOTA
[01:03:27]NAVI vs EG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
pycharm+django创建一个搜索网页实例代码
2018/01/24 Python
python用插值法绘制平滑曲线
2021/02/19 Python
django创建最简单HTML页面跳转方法
2019/08/16 Python
Python动态声明变量赋值代码实例
2019/12/30 Python
如何在python开发工具PyCharm中搭建QtPy环境(教程详解)
2020/02/04 Python
python 用opencv实现图像修复和图像金字塔
2020/11/27 Python
CSS3中使用RGBa来调节透明度的教程
2016/05/09 HTML / CSS
新秀丽拉杆箱美国官方网站:Samsonite美国
2016/07/25 全球购物
MyHeritage美国:家族史研究和DNA测试的领先服务
2019/05/27 全球购物
TCP协议通讯的过程和步骤是什么
2015/10/18 面试题
超市总经理岗位职责
2014/02/02 职场文书
宿舍违规用电检讨书
2014/02/16 职场文书
2014年采购部工作总结
2014/11/20 职场文书
2014小学语文教学工作总结
2014/12/17 职场文书
小学生交通安全寄语
2015/02/27 职场文书
英文产品推荐信
2015/03/27 职场文书
Go语言基础知识点介绍
2021/07/04 Golang
Django对接elasticsearch实现全文检索的示例代码
2021/08/02 Python