mysql8.0窗口函数:rank,dense_rank,row_number 使用上的区别

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介:

本节主要介绍排序类 rank,dense_rank,row_number使用上的区别

*RANK:跳跃排序
DENSE_RANK:连续排序
row_number:没有重复值的排序[记录相等也是不重复的]可以进行分页使用。
*
案例:

root@my3308.sock-8.0.11>[test]>select * from window_test;
+------+--------+---------+-------+
| id   | name   | subject | score |
+------+--------+---------+-------+
|    1 | 小黄   | 数学    |   100 |
|    2 | 小黄   | 语文    |    90 |
|    3 | 小黄   | 英语    |    80 |
|    4 | 小黄   | 物理    |   100 |
|    5 | 小黄   | 化学    |    99 |
|    6 | 小红   | 数学    |    90 |
|    7 | 小红   | 语文    |   100 |
|    8 | 小红   | 英语    |    80 |
|    9 | 小红   | 物理    |    90 |
|   10 | 小红   | 化学    |    70 |
|   11 | 小绿   | 数学    |    90 |
|   12 | 小绿   | 语文    |    92 |
|   13 | 小绿   | 英语    |    93 |
|   14 | 小绿   | 物理    |    94 |
|   15 | 小绿   | 化学    |    95 |
|   16 | 小青   | 数学    |    30 |
|   17 | 小青   | 语文    |   100 |
|   17 | 小青   | 英语    |    70 |
|   17 | 小青   | 物理    |    88 |
|   17 | 小青   | 化学    |    96 |
+------+--------+---------+-------+
20 rows in set (0.00 sec)

rank :跳跃式的排序:

image

dense_rank:连续排序

image

row_number:没有重复值的排序[记录相等也是不重复的]可以进行分页使用

root@my3308.sock-8.0.11>[test]>select *,row_number()  over(partition by subject order by score desc) as 'rank' from window_test;
+------+--------+---------+-------+------+
| id   | name   | subject | score | rank |
+------+--------+---------+-------+------+
|    5 | 小黄   | 化学    |    99 |    1 |
|   17 | 小青   | 化学    |    96 |    2 |
|   15 | 小绿   | 化学    |    95 |    3 |
|   10 | 小红   | 化学    |    70 |    4 |
|    1 | 小黄   | 数学    |   100 |    1 |
|    6 | 小红   | 数学    |    90 |    2 |
|   11 | 小绿   | 数学    |    90 |    3 |
|   16 | 小青   | 数学    |    30 |    4 |
|    4 | 小黄   | 物理    |   100 |    1 |
|   14 | 小绿   | 物理    |    94 |    2 |
|    9 | 小红   | 物理    |    90 |    3 |
|   17 | 小青   | 物理    |    88 |    4 |
|   13 | 小绿   | 英语    |    93 |    1 |
|    3 | 小黄   | 英语    |    80 |    2 |
|    8 | 小红   | 英语    |    80 |    3 |
|   17 | 小青   | 英语    |    70 |    4 |
|    7 | 小红   | 语文    |   100 |    1 |
|   17 | 小青   | 语文    |   100 |    2 |
|   12 | 小绿   | 语文    |    92 |    3 |
|    2 | 小黄   | 语文    |    90 |    4 |
+------+--------+---------+-------+------+
20 rows in set (0.00 sec)

--rank:数学成绩90 排第几名:

root@my3308.sock-8.0.11>[test]>select * from window_test where subject='数学' order by score desc;
+------+--------+---------+-------+
| id   | name   | subject | score |
+------+--------+---------+-------+
|    1 | 小黄   | 数学    |   100 |
|    6 | 小红   | 数学    |    90 |
|   11 | 小绿   | 数学    |    90 |
|   16 | 小青   | 数学    |    30 |
+------+--------+---------+-------+
4 rows in set (0.00 sec)

root@my3308.sock-8.0.11>[test]>select * from (
select *,rank() over(partition by subject order by score desc
) as 'rank' from window_test) x 
where  x.subject='数学' and   x.score=90;
+------+--------+---------+-------+------+
| id   | name   | subject | score | rank |
+------+--------+---------+-------+------+
|    6 | 小红   | 数学    |    90 |    2 |
|   11 | 小绿   | 数学    |    90 |    2 |
+------+--------+---------+-------+------+
2 rows in set (0.00 sec)

--dense_rank:查询每门课的前2名:

root@my3308.sock-8.0.11>[test]>select name,subject,score from (select *,dense_rank()  over(partition by subject order by score desc) as 'rank' from window_test) x where x.rank<=2;
+--------+---------+-------+
| name   | subject | score |
+--------+---------+-------+
| 小黄   | 化学    |    99 |
| 小青   | 化学    |    96 |
| 小黄   | 数学    |   100 |
| 小红   | 数学    |    90 |
| 小绿   | 数学    |    90 |
| 小黄   | 物理    |   100 |
| 小绿   | 物理    |    94 |
| 小绿   | 英语    |    93 |
| 小黄   | 英语    |    80 |
| 小红   | 英语    |    80 |
| 小红   | 语文    |   100 |
| 小青   | 语文    |   100 |
| 小绿   | 语文    |    92 |
+--------+---------+-------+
13 rows in set (0.00 sec)
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
存储 SQL 运维
TIDB和MySQL的区别
TIDB和MySQL的区别
206 0
|
2月前
|
存储 缓存 关系型数据库
Mysql的两种存储引擎以及区别
Mysql的两种存储引擎以及区别
23 1
|
3月前
|
SQL 人工智能 关系型数据库
mysql中in 和exists的区别
mysql中in 和exists的区别
|
1月前
|
关系型数据库 MySQL 索引
mysql查询中内连接和左连接有什么区别
mysql查询中内连接和左连接有什么区别
15 0
|
29天前
|
存储 关系型数据库 MySQL
MySQL引擎对决:深入解析MyISAM和InnoDB的区别
MySQL引擎对决:深入解析MyISAM和InnoDB的区别
36 0
|
12天前
|
Cloud Native 关系型数据库 MySQL
云原生数据仓库产品使用合集之ADB MySQL湖仓版和 StarRocks 的使用场景区别,或者 ADB 对比 StarRocks 的优劣势
阿里云AnalyticDB提供了全面的数据导入、查询分析、数据管理、运维监控等功能,并通过扩展功能支持与AI平台集成、跨地域复制与联邦查询等高级应用场景,为企业构建实时、高效、可扩展的数据仓库解决方案。以下是对AnalyticDB产品使用合集的概述,包括数据导入、查询分析、数据管理、运维监控、扩展功能等方面。
|
2月前
|
存储 缓存 关系型数据库
MySQL两种存储引擎及区别
MySQL两种存储引擎及区别
28 4
MySQL两种存储引擎及区别
|
2天前
|
关系型数据库 MySQL
MySQL union和union all的用法详解和区别
MySQL union和union all的用法详解和区别
9 0
|
3天前
|
存储 SQL 关系型数据库
mysql中MyISAM和InnoDB的区别是什么
mysql中MyISAM和InnoDB的区别是什么
11 0
|
4天前
|
关系型数据库 MySQL
MySQL 的 union 和union all 的区别
【5月更文挑战第4天】MySQL 的 union 和union all 的区别
20 7