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 18 MySQL
.Net Core导入千万级数据至Mysql的步骤
May 24 MySQL
解决Navicat for Mysql连接报错1251的问题(连接失败)
May 27 MySQL
MySQL中IF()、IFNULL()、NULLIF()、ISNULL()函数的使用详解
Jun 26 MySQL
MySQL里面的子查询的基本使用
Aug 02 MySQL
MySQL中order by的使用详情
Nov 17 MySQL
MySQL中B树索引和B+树索引的区别详解
Mar 03 MySQL
MySQL高级进阶sql语句总结大全
Mar 16 MySQL
详细聊一聊mysql的树形结构存储以及查询
Apr 05 MySQL
MySQL中一条SQL查询语句是如何执行的
Apr 08 MySQL
使用Mysql计算地址的经纬度距离和实时位置信息
Apr 29 MySQL
MySQL 原理与优化之Update 优化
Aug 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
坏狼php学习 计数器实例代码
2008/06/15 PHP
基于preg_match_all采集后数据处理的一点心得笔记(编码转换和正则匹配)
2014/01/31 PHP
php画图实例
2014/11/05 PHP
PHP的serialize序列化数据以及JSON格式化数据分析
2015/10/10 PHP
[原创]php常用字符串输出方法分析(echo,print,printf及sprintf)
2016/07/09 PHP
PHP实现递归目录的5种方法
2016/10/27 PHP
PHP+Redis事务解决高并发下商品超卖问题(推荐)
2020/08/03 PHP
javascript中的location用法简单介绍
2007/03/07 Javascript
JS操作数据库的实例代码
2013/10/17 Javascript
JavaScript数值千分位格式化的两种简单实现方法
2016/08/01 Javascript
Js 获取、判断浏览器版本信息的简单方法
2016/08/08 Javascript
javascript特殊文本输入框网页特效
2016/09/13 Javascript
Angular2学习笔记——详解路由器模型(Router)
2016/12/02 Javascript
详解jQuery简单的表格应用
2016/12/16 Javascript
Vue.Js中的$watch()方法总结
2017/03/23 Javascript
关于bootstrap日期转化,bootstrap-editable的简单使用,bootstrap-fileinput的使用详解
2017/05/12 Javascript
使用vue-router beforEach实现判断用户登录跳转路由筛选功能
2018/06/25 Javascript
取消Bootstrap的dropdown-menu点击默认关闭事件方法
2018/08/10 Javascript
layui添加动态菜单与选项卡
2019/07/26 Javascript
vue实现select下拉显示隐藏功能
2019/09/30 Javascript
基于js实现复制内容到操作系统粘贴板过程解析
2019/10/11 Javascript
[06:14]《辉夜杯》外卡赛附加赛 4支战队巡礼
2015/10/23 DOTA
详细讲解Python中的文件I/O操作
2015/05/24 Python
Python基于PyGraphics包实现图片截取功能的方法
2017/12/21 Python
python实现决策树分类(2)
2018/08/30 Python
Python Django的安装配置教程图文详解
2019/07/17 Python
python实现京东订单推送到测试环境,提供便利操作示例
2019/08/09 Python
Python利用WMI实现ping命令的例子
2019/08/14 Python
python tkinter GUI绘制,以及点击更新显示图片代码
2020/03/14 Python
Python中猜拳游戏与猜筛子游戏的实现方法
2020/09/04 Python
Python django框架 web端视频加密的实例详解
2020/11/20 Python
美国家喻户晓的保健品品牌:Vitamin World(维他命世界)
2016/08/19 全球购物
玉兰油美国官网:OLAY美国
2018/10/25 全球购物
工作决心书范文
2014/03/11 职场文书
副科竞争上岗演讲稿
2014/05/12 职场文书
咖啡厅里的创业计划书
2019/08/21 职场文书