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 pt-slave-restart工具的使用简介
Apr 07 MySQL
MySQL之高可用集群部署及故障切换实现
Apr 22 MySQL
MySQL Router的安装部署
Apr 24 MySQL
MySQL注入基础练习
May 30 MySQL
MySQL中in和exists区别详解
Jun 03 MySQL
如何搭建 MySQL 高可用高性能集群
Jun 21 MySQL
MySQL快速插入一亿测试数据
Jun 23 MySQL
一文弄懂MySQL中redo log与binlog的区别
Feb 15 MySQL
MySQL慢查询优化解决问题
Mar 17 MySQL
数据分析数据库ClickHouse在大数据领域应用实践
Apr 03 MySQL
MySQL中优化SQL语句的方法(show status、explain分析服务器状态信息)
Apr 09 MySQL
mysql 子查询的使用
Apr 28 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导出到Excel或CSV的详解(附utf8、gbk 编码转换)
2013/06/25 PHP
PHP实现获取客户端IP并获取IP信息
2015/03/17 PHP
关于扩展 Laravel 默认 Session 中间件导致的 Session 写入失效问题分析
2016/01/08 PHP
php的socket编程详解
2016/11/20 PHP
PHP函数按引用传递参数及函数可选参数用法示例
2018/06/04 PHP
javascript中window.event事件用法详解
2012/12/11 Javascript
JS获取URL中参数值(QueryString)的4种方法分享
2014/04/12 Javascript
Javascript中的默认参数详解
2014/10/22 Javascript
解决bootstrap中modal遇到Esc键无法关闭页面
2015/03/09 Javascript
jquery append 动态添加的元素事件on 不起作用的解决方案
2015/07/30 Javascript
使用基于Node.js的构建工具Grunt来发布ASP.NET MVC项目
2016/02/15 Javascript
值得分享的Bootstrap Table使用教程
2016/11/23 Javascript
Vue2.x中的父子组件相互通信的实现方法
2017/05/02 Javascript
Nodejs 发布自己的npm包并制作成命令行工具的实例讲解
2018/05/15 NodeJs
vuejs点击class变化的实例
2018/09/05 Javascript
基于vue2.0实现仿百度前端分页效果附实现代码
2018/10/30 Javascript
vue指令之表单控件绑定v-model v-model与v-bind结合使用
2019/04/17 Javascript
Vue如何实现监听组件原生事件
2020/07/03 Javascript
JavaScript Blob对象原理及用法详解
2020/10/14 Javascript
[45:34]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第一场 12.18
2020/12/19 DOTA
Python实现随机选择元素功能
2017/09/14 Python
win10下Python3.6安装、配置以及pip安装包教程
2017/10/01 Python
Django视图和URL配置详解
2018/01/31 Python
python实现共轭梯度法
2019/07/03 Python
运行tensorflow python程序,限制对GPU和CPU的占用操作
2020/02/06 Python
让IE支持HTML5的方法
2012/12/11 HTML / CSS
CPB肌肤之钥美国官网:Clé de Peau Beauté
2017/09/05 全球购物
创意广告词
2014/03/17 职场文书
小学课外活动总结
2014/07/09 职场文书
大学竞选班干部演讲稿
2014/08/21 职场文书
2014年政协工作总结
2014/12/09 职场文书
边城读书笔记
2015/06/29 职场文书
JavaScript实现优先级队列
2021/12/06 Javascript
vue @click.native 绑定原生点击事件
2022/04/22 Vue.js
MySQL脏读,幻读和不可重复读
2022/05/11 MySQL
JavaScript架构localStorage特殊场景下二次封装操作
2022/06/21 Javascript