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 COUNT函数的使用与优化
May 10 MySQL
Mysql官方性能测试工具mysqlslap的使用简介
May 21 MySQL
MySQL 常见存储引擎的优劣
Jun 02 MySQL
mysql分表之后如何平滑上线详解
Nov 01 MySQL
Mysql存储过程、触发器、事件调度器使用入门指南
Jan 22 MySQL
MySQL中IO问题的深入分析与优化
Apr 02 MySQL
navicat 连接Ubuntu虚拟机的mysql的操作方法
Apr 02 MySQL
Mysql排查分析慢sql之explain实战案例
Apr 19 MySQL
Mysql InnoDB 的内存逻辑架构
May 06 MySQL
Mysql将字符串按照指定字符分割的正确方法
May 30 MySQL
MySQL8.0 Undo Tablespace管理详解
Jun 16 MySQL
面试官问我Mysql的存储引擎了解多少
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
window+nginx+php环境配置 附配置搭配说明
2010/12/29 PHP
phpmyadmin安装时提示:Warning: require_once(./libraries/common.inc.php)错误解决办法
2011/08/18 PHP
PHP 简易输出CSV表格文件的方法详解
2013/06/20 PHP
PHP获取数组最后一个值的2种方法
2015/01/21 PHP
PHP使用array_fill定义多维数组的方法
2015/03/18 PHP
PHP实现更改hosts文件的方法示例
2017/08/08 PHP
PHP绕过open_basedir限制操作文件的方法
2018/06/10 PHP
判断目标是否是window,document,和拥有tagName的Element的代码
2010/05/31 Javascript
jQuery中:only-child选择器用法实例
2015/01/03 Javascript
javascript转换日期字符串为Date日期对象的方法
2015/02/13 Javascript
jQuery中的ajax async同步和异步详解
2015/09/29 Javascript
谈谈encodeURI和encodeURIComponent以及escape的区别与应用
2015/11/24 Javascript
分享jQuery网页元素拖拽插件
2020/12/01 Javascript
浅谈js的异步执行
2016/10/18 Javascript
jquery仿京东侧边栏导航效果
2017/03/02 Javascript
javaScript之split与join的区别(详解)
2017/11/08 Javascript
微信小程序实现录制、试听、上传音频功能(带波形图)
2020/02/27 Javascript
vue和小程序项目中使用iconfont的方法
2020/05/19 Javascript
vuex刷新后数据丢失的解决方法
2020/10/18 Javascript
Python 实现数据结构中的的栈队列
2019/05/16 Python
python web框架中实现原生分页
2019/09/08 Python
Python3.7基于hashlib和Crypto实现加签验签功能(实例代码)
2019/12/04 Python
Pycharm小白级简单使用教程
2020/01/08 Python
Python异常原理及异常捕捉实现过程解析
2020/03/25 Python
超酷炫 CSS3垂直手风琴菜单
2016/06/28 HTML / CSS
逼真的HTML5树叶飘落动画
2016/03/01 HTML / CSS
Darphin迪梵官网: 来自巴黎,植物和精油调制的护肤品牌
2016/10/11 全球购物
英国比较机场停车场网站:Airport Parking Essentials
2019/12/01 全球购物
优秀毕业生求职推荐信范文
2013/11/21 职场文书
上班睡觉检讨书
2014/01/09 职场文书
老公给老婆的道歉信
2014/01/10 职场文书
一年级家长会邀请函
2014/01/25 职场文书
2014年残疾人工作总结
2014/12/06 职场文书
2019各种保证书范文
2019/06/24 职场文书
使用GO语言实现Mysql数据库CURD的简单示例
2021/08/07 Golang
javascript中Set、Map、WeakSet、WeakMap区别
2022/12/24 Javascript