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 sql_mode修改不生效的原因及解决
May 07 MySQL
修改MySQL的默认密码的四种小方法
May 26 MySQL
Mysql效率优化定位较低sql的两种方式
May 26 MySQL
mysql如何能有效防止删库跑路
Oct 05 MySQL
Mysql中有关Datetime和Timestamp的使用总结
Dec 06 MySQL
MySQL常见优化方案汇总
Jan 18 MySQL
Mysql数据库表中为什么有索引却没有提高查询速度
Feb 24 MySQL
MySQL慢查询优化解决问题
Mar 17 MySQL
MYSQL优化之数据表碎片整理详解
Apr 03 MySQL
Mysql数据库事务的脏读幻读及不可重复读详解
May 30 MySQL
mysql数据库实现设置字段长度
Jun 10 MySQL
MySQL池化框架学习接池自定义
Jul 23 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
加强版phplib的DB类
2008/03/31 PHP
PHP实现手机归属地查询API接口实现代码
2012/08/27 PHP
PHP中使用cURL实现Get和Post请求的方法
2013/03/13 PHP
php简单实现MVC
2015/02/05 PHP
codeigniter实现get分页的方法
2015/07/10 PHP
详解WordPress中调用评论模板和循环输出评论的PHP函数
2016/01/05 PHP
PHP 实现手机端APP支付宝支付功能
2018/06/07 PHP
浅谈laravel数据库查询返回的数据形式
2019/10/21 PHP
javascript之卸载鼠标事件的代码
2007/05/14 Javascript
jQuery下扩展插件和拓展函数的写法(匿名函数使用的典型例子)
2010/10/20 Javascript
php中给js数组赋值方法
2014/03/10 Javascript
禁止iframe脚本弹出的窗口覆盖了父窗口的方法
2014/09/06 Javascript
在Node.js应用中使用Redis的方法简介
2015/06/24 Javascript
JavaScript鼠标特效大全
2016/09/13 Javascript
网页挂马方式整理及详细介绍
2016/11/03 Javascript
详解Angular Reactive Form 表单验证
2017/07/06 Javascript
node实现简单的反向代理服务器
2017/07/26 Javascript
JavaScript面试出现频繁的一些易错点整理
2018/03/29 Javascript
浅谈Webpack下多环境配置的思路
2018/06/27 Javascript
vue单页面应用打开新窗口显示跳转页面的实例
2018/09/21 Javascript
vue router 通过路由来实现切换头部标题功能
2019/04/24 Javascript
layui数据表格实现重载数据表格功能(搜索功能)
2019/07/27 Javascript
Angular5整合富文本编辑器TinyMCE的方法(汉化+上传)
2020/05/26 Javascript
微信小程序实现加入购物车滑动轨迹
2020/11/18 Javascript
Python基于matplotlib实现绘制三维图形功能示例
2018/01/18 Python
基于Python数据结构之递归与回溯搜索
2020/02/26 Python
django model 条件过滤 queryset.filter(**condtions)用法详解
2020/05/20 Python
解决python中import文件夹下面py文件报错问题
2020/06/01 Python
薇诺娜官方网上商城:专注敏感肌肤
2017/05/25 全球购物
股份合作协议书
2014/04/12 职场文书
工商管理本科生求职信
2014/07/13 职场文书
2014年平安创建工作总结
2014/11/24 职场文书
乔迁之喜答谢词
2015/01/05 职场文书
预备党员转正意见
2015/06/01 职场文书
超详细Python解释器新手安装教程
2021/05/10 Python
Win11 KB5015814遇安装失败 影响开始菜单性能解决方法
2022/07/15 数码科技