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 InnoDB存储引擎的内存管理
Apr 08 MySQL
MySQL创建高性能索引的全步骤
May 02 MySQL
mysql数据库入门第一步之创建表
May 14 MySQL
MySQL中VARCHAR与CHAR格式数据的区别
May 26 MySQL
MySQL中的布尔值,怎么存储false或true
Jun 04 MySQL
MySQL 如何设计统计数据表
Jun 15 MySQL
MySQL命令无法输入中文问题的解决方式
Aug 30 MySQL
SQL注入详解及防范方法
Dec 06 MySQL
彻底解决MySQL使用中文乱码的方法
Jan 22 MySQL
教你如何让spark sql写mysql的时候支持update操作
Feb 15 MySQL
MySQL实现配置主从复制项目实践
Mar 31 MySQL
SQLServer常见数学函数梳理总结
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
《斗罗大陆》六翼天使武魂最强,为什么老千家不是上三宗?
2020/03/02 国漫
php 删除无限级目录与文件代码共享
2008/11/22 PHP
php 各种应用乱码问题的解决方法
2010/05/09 PHP
有道搜索和IP138的IP的API接口(PHP应用)
2012/11/29 PHP
Mysql中分页查询的两个解决方法比较
2013/05/02 PHP
一漂亮的PHP图片验证码实例
2014/03/21 PHP
讲解WordPress中用于获取评论模板和搜索表单的PHP函数
2015/12/28 PHP
DHTML Slide Show script图片轮换
2008/03/03 Javascript
js程序中美元符号$是什么
2008/06/05 Javascript
js 复制或插入Html的实现方法小结
2010/05/19 Javascript
js显示时间 js显示最后修改时间
2013/01/02 Javascript
js和php如何获取当前url的内容
2013/09/22 Javascript
jquery 判断滚动条到达了底部和顶端的方法
2014/04/02 Javascript
基于NodeJS的前后端分离的思考与实践(一)全栈式开发
2014/09/26 NodeJs
最精简的JavaScript实现鼠标拖动效果的方法
2015/05/11 Javascript
vue日期组件 支持vue1.0和2.0
2017/01/09 Javascript
详解vue-cli + webpack 多页面实例应用
2017/04/25 Javascript
vue 下列表侧滑操作实例代码详解
2018/07/24 Javascript
原生JS实现动态加载js文件并在加载成功后执行回调函数的方法
2020/12/30 Javascript
javascript设计模式 ? 状态模式原理与用法实例分析
2020/04/22 Javascript
python类定义的讲解
2013/11/01 Python
利用python获取当前日期前后N天或N月日期的方法示例
2017/07/30 Python
Python Selenium Cookie 绕过验证码实现登录示例代码
2018/04/10 Python
python实现数据导出到excel的示例--普通格式
2018/05/03 Python
Python实现求一个集合所有子集的示例
2018/05/04 Python
python实现计数排序与桶排序实例代码
2019/03/28 Python
python线程安全及多进程多线程实现方法详解
2019/09/27 Python
Tensorflow 多线程设置方式
2020/02/06 Python
解决Jupyter notebook更换主题工具栏被隐藏及添加目录生成插件问题
2020/04/20 Python
python 基于opencv 绘制图像轮廓
2020/12/11 Python
利用三角函数在canvas上画虚线的方法
2018/01/11 HTML / CSS
百货商场楼层班组长竞聘书
2014/03/31 职场文书
施工安全汇报材料
2014/08/17 职场文书
2014年商场国庆节活动策划方案
2014/09/16 职场文书
党校团干班培训心得体会
2016/01/06 职场文书
Python控制台输出俄罗斯方块的方法实例
2021/04/17 Python