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 24 MySQL
MySQL系列之一 MariaDB-server安装
Jul 02 MySQL
QT连接MYSQL数据库的详细步骤
Jul 07 MySQL
MySQL 5.7常见数据类型
Jul 15 MySQL
MySQL外键约束(FOREIGN KEY)案例讲解
Aug 23 MySQL
MyBatis 动态SQL全面详解
Oct 05 MySQL
为什么MySQL 删除表数据 磁盘空间还一直被占用
Oct 16 MySQL
记一次Mysql不走日期字段索引的原因小结
Oct 24 MySQL
MySQL数据库索引的最左匹配原则
Nov 20 MySQL
一条慢SQL语句引发的改造之路
Mar 16 MySQL
MySQL学习必备条件查询数据
Mar 25 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
关于文本留言本的分页代码
2006/10/09 PHP
php 更新数据库中断的解决方法
2009/06/05 PHP
php读取csv实现csv文件下载功能
2013/12/18 PHP
Yii把CGridView文本框换成下拉框的方法
2014/12/03 PHP
php设置页面超时时间解决方法
2015/09/22 PHP
PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间
2016/05/06 PHP
javascript中的注释使用与注意事项小结
2011/09/20 Javascript
用jQuery获取IE9下拉框默认值问题探讨
2013/07/22 Javascript
js操作输入框提示信息且响应鼠标事件
2014/03/25 Javascript
AngularJS HTML编译器介绍
2014/12/06 Javascript
js实现仿爱微网两级导航菜单效果代码
2015/08/31 Javascript
Bootstrap 附加导航(Affix)插件实例详解
2016/06/01 Javascript
浅谈JS之iframe中的窗口
2016/09/13 Javascript
数组Array的排序sort方法
2017/02/17 Javascript
Angular 4.x中表单Reactive Forms详解
2017/04/25 Javascript
JavaScript中in和hasOwnProperty区别详解
2017/08/04 Javascript
详解vue-cli本地环境API代理设置和解决跨域
2017/09/05 Javascript
vue计算属性和监听器实例解析
2018/05/10 Javascript
JS删除对象中某一属性案例详解
2020/09/08 Javascript
[02:07]DOTA2新英雄展现中国元素,完美“圣典”亮相央视
2016/12/19 DOTA
[08:06]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant 选手采访
2021/03/11 DOTA
Python开发常用的一些开源Package分享
2015/02/14 Python
Python中threading模块join函数用法实例分析
2015/06/04 Python
pandas表连接 索引上的合并方法
2018/06/08 Python
python3实现网络爬虫之BeautifulSoup使用详解
2018/12/19 Python
详细介绍Python进度条tqdm的使用
2019/07/31 Python
Alpine安装Python3依赖出现的问题及解决方法
2020/12/25 Python
python热力图实现简单方法
2021/01/29 Python
在Ajax应用中信息是如何在浏览器和服务器之间传递的
2016/05/31 面试题
公司出纳岗位职责
2013/12/07 职场文书
如何打造一封优秀的留学推荐信
2014/01/25 职场文书
党员教师群众路线对照检查材料思想汇报
2014/09/29 职场文书
针对吵架老公保证书
2015/05/08 职场文书
何玥事迹观后感
2015/06/16 职场文书
员工旷工检讨书
2015/08/15 职场文书
Arthas排查Kubernetes中应用频繁挂掉重启异常
2022/02/28 MySQL