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 08 MySQL
MYSQL主从数据库同步备份配置的方法
May 26 MySQL
解决Navicat for MySQL 连接 MySQL 报2005错误的问题
May 29 MySQL
Mysql 如何实现多张无关联表查询数据并分页
Jun 05 MySQL
MySql 8.0及对应驱动包匹配的注意点说明
Jun 23 MySQL
详细聊聊MySQL中慢SQL优化的方向
Aug 30 MySQL
mysql中整数数据类型tinyint详解
Dec 06 MySQL
MySQL中IO问题的深入分析与优化
Apr 02 MySQL
MySQL的存储函数与存储过程的区别解析
Apr 08 MySQL
MySQL数据库优化之通过索引解决SQL性能问题
Apr 10 MySQL
Mysql 一主多从的部署
May 20 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
frename PHP 灵活文件命名函数 frename
2009/09/09 PHP
php生成rss类用法实例
2015/04/14 PHP
php使用curl模拟浏览器表单上传文件或者图片的方法
2018/11/10 PHP
php文件后缀不强制为.php的实操方法
2019/09/18 PHP
javascript textarea光标定位方法(兼容IE和FF)
2011/03/12 Javascript
用js获取电脑信息(是使用与IE浏览器)
2013/01/15 Javascript
jquery插件实现鼠标经过图片右侧显示大图的效果(类似淘宝)
2013/02/04 Javascript
解析js如何获取当前url中的参数值并复制给input
2013/06/23 Javascript
Extjs4中tree的拖拽功能(可以两棵树之间拖拽) 简单实例
2013/12/08 Javascript
jQuery中:empty选择器用法实例
2014/12/30 Javascript
jQuery实现的图片分组切换焦点图插件
2015/01/06 Javascript
JavaScript数据库TaffyDB用法实例分析
2015/07/27 Javascript
jquery UI Datepicker时间控件的使用及问题解决
2016/04/28 Javascript
jQuery Mobile操作HTML5的常用函数总结
2016/05/17 Javascript
jQuery过滤特殊字符及JS字符串转为数字
2016/05/26 Javascript
深入理解JavaScript单体内置对象
2016/06/06 Javascript
html5+canvas实现支持触屏的签名插件教程
2017/05/08 Javascript
Vue2.x中的Render函数详解
2017/05/30 Javascript
javascript实现点击星星小游戏
2019/12/24 Javascript
微信小程序中的video视频实现 自定义播放按钮、封面图、视频封面上文案
2020/01/02 Javascript
JavaScript实现烟花绽放动画效果
2020/08/04 Javascript
element-ui tree结构实现增删改自定义功能代码
2020/08/31 Javascript
python编程开发之日期操作实例分析
2015/11/13 Python
Python 迭代器与生成器实例详解
2017/05/18 Python
Django重装mysql后启动报错:No module named ‘MySQLdb’的解决方法
2018/04/22 Python
flask/django 动态查询表结构相同表名不同数据的Model实现方法
2019/08/29 Python
Keras搭建自编码器操作
2020/07/03 Python
Python运算符+与+=的方法实例
2021/02/18 Python
css3个性化字体_动力节点Java学院整理
2017/07/12 HTML / CSS
HTML5实现分享到微信好友朋友圈QQ好友QQ空间微博二维码功能
2018/01/03 HTML / CSS
如何设定的weblogic的热启动模式(开发模式)与产品发布模式
2012/09/08 面试题
制药工程专业职业生涯规划范文
2014/03/10 职场文书
成品库仓管员岗位职责
2014/04/06 职场文书
离婚协议书怎么写2014
2014/09/30 职场文书
个人公司授权委托书范本
2014/10/12 职场文书
Python机器学习之KNN近邻算法
2021/05/14 Python