【随手记】MySQL中ROW_NUMBER()、RANK()和DENSE_RANK()函数的用法

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: 【随手记】MySQL中ROW_NUMBER()、RANK()和DENSE_RANK()函数的用法

当使用ROW_NUMBER()函数、RANK()函数和DENSE_RANK()函数对一列数进行排名时,它们的用法和结果会有一些区别。

假设有一个名为students的表,包含学生的姓名和分数信息。

+----+-------+--------+
| ID | Name  | Score  |
+----+-------+--------+
| 1  | Alice | 80     |
| 2  | Bob   | 85     |
| 3  | Cathy | 90     |
| 4  | David | 90     |
| 5  | Emma  | 95     |
+----+-------+--------+
  1. 使用ROW_NUMBER()函数进行排名:
SELECT Name, Score, ROW_NUMBER() OVER (ORDER BY Score DESC) AS RowNumber
FROM students;

结果如下:

+-------+--------+-----------+
| Name  | Score  | RowNumber |
+-------+--------+-----------+
| Emma  | 95     | 1         |
| Cathy | 90     | 2         |
| David | 90     | 3         |
| Bob   | 85     | 4         |
| Alice | 80     | 5         |
+-------+--------+-----------+

ROW_NUMBER()函数会为每一行分配一个唯一的数字,按照分数降序排名。注意,分数相同的行会有不同的排名。

  1. 使用RANK()函数进行排名:
SELECT Name, Score, RANK() OVER (ORDER BY Score DESC) AS Rank
FROM students;

结果如下:

+-------+--------+------+
| Name  | Score  | Rank |
+-------+--------+------+
| Emma  | 95     | 1    |
| Cathy | 90     | 2    |
| David | 90     | 2    |
| Bob   | 85     | 4    |
| Alice | 80     | 5    |
+-------+--------+------+

RANK()函数会为相同分数的行分配相同的排名,然后跳过下一个排名。在上面的例子中,Cathy和David的分数相同,所以它们都被分配了排名2。

  1. 使用DENSE_RANK()函数进行排名:
SELECT Name, Score, DENSE_RANK() OVER (ORDER BY Score DESC) AS DenseRank
FROM students;

结果如下:

+-------+--------+-----------+
| Name  | Score  | DenseRank |
+-------+--------+-----------+
| Emma  | 95     | 1         |
| Cathy | 90     | 2         |
| David | 90     | 2         |
| Bob   | 85     | 3         |
| Alice | 80     | 4         |
+-------+--------+-----------+

DENSE_RANK()函数会为相同分数的行分配相同的排名,并连续计数下去。在上面的例子中,Cathy和David的分数相同,它们都被分配了排名2,并且没有排名3。排名4则对应的是分数为90的Linda。该函数的作用是按照指定的列的值对行进行排序,并为相同值的行分配相同的排名,连续计数下去。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
SQL 关系型数据库 MySQL
MySQL 常用函数
我们这次全面梳理 MySQL 中的常用函数,涵盖 聚合函数、字符串函数、日期时间函数、数学函数 和 控制流函数 等五大类。每类函数均配有语法说明与实用示例,帮助读者提升数据处理能力,如统计分析、文本处理、日期计算、条件判断等。文章结尾提供了丰富的实战练习,帮助读者巩固和应用函数技巧,是进阶 SQL 编程与数据分析的实用工具手册。
936 2
|
SQL 关系型数据库 MySQL
【YashanDB知识库】MySQL field 函数的改写方法
【YashanDB知识库】MySQL field 函数的改写方法
|
SQL 关系型数据库 MySQL
Mysql-常用函数及其用法总结
以上列举了MySQL中一些常用的函数及其用法。这些函数在日常的数据库操作中非常实用,能够简化数据查询和处理过程,提高开发效率。掌握这些函数的使用方法,可以更高效地处理和分析数据。
452 19
|
SQL 关系型数据库 MySQL
【MySQL基础篇】盘点MySQL常用四大类函数
本文介绍了MySQL中的四大类常用函数:字符串函数、数值函数、日期函数和流程函数。
【MySQL基础篇】盘点MySQL常用四大类函数
|
SQL 关系型数据库 MySQL
【YashanDB知识库】MySQL field 函数的改写方法
本文来自YashanDB官网,介绍将MySQL的FIELD函数改写到YashanDB的方法。MySQL中,FIELD函数用于自定义排序;而在YashanDB中,可使用DECODE或CASE语句实现类似功能。示例展示对表`t1`按指定顺序排序的过程,提供两种改写方式,结果均符合预期。
|
算法
Leetcode 313. Super Ugly Number
题目翻译成中文是『超级丑数』,啥叫丑数?丑数就是素因子只有2,3,5的数,7 14 21不是丑数,因为他们都有7这个素数。 这里的超级丑数只是对丑数的一个扩展,超级丑数的素因子不再仅限于2 3 5,而是由题目给定一个素数数组。与朴素丑数算法相比,只是将素因子变了而已,解法还是和朴素丑数一致的。
324 1
|
存储 SQL 算法
LeetCode 题目 65:有效数字(Valid Number)【python】
LeetCode 题目 65:有效数字(Valid Number)【python】
|
存储 算法
【LeetCode力扣】单调栈解决Next Greater Number(下一个更大值)问题
【LeetCode力扣】单调栈解决Next Greater Number(下一个更大值)问题
266 0
|
存储
Leetcode Single Number II (面试题推荐)
给你一个整数数组,每个元素出现了三次,但只有一个元素出现了一次,让你找出这个数,要求线性的时间复杂度,不使用额外空间。
171 0
|
算法
LeetCode 414. Third Maximum Number
给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。
342 0
LeetCode 414. Third Maximum Number

推荐镜像

更多