SQL窗口函数-RANK() 函数的解释和用法
创作时间:
作者:
@小白创作中心
SQL窗口函数-RANK() 函数的解释和用法
引用
CSDN
1.
https://blog.csdn.net/yunAike/article/details/145421008
RANK()是SQL中常用的窗口函数之一,主要用于为查询结果集中的数据生成排名。与ROW_NUMBER()不同,RANK()在遇到相同值时会分配相同的排名,并跳过后续的排名。本文将详细介绍RANK()函数的基本语法、关键特性和具体应用场景。
1. 基本语法
RANK() OVER (PARTITION BY <column_name> ORDER BY <column_name> ASC|DESC)
- PARTITION BY:如果你想按照某一列对数据进行分区,可以使用PARTITION BY。每个分区内的数据排名将从 1 开始。如果不使用PARTITION BY,则排名会在整个结果集上生成。
- ORDER BY:决定排名的顺序,通常是基于某个列的升序(ASC)或降序(DESC)来排序。
2. 关键点:
- RANK()会对相同的值赋予相同的排名,并且会跳过后续的排名。例如,如果两个值并列第一,那么接下来的排名会跳到第三位,而不是第二位。
- 它与ROW_NUMBER()不同,后者不会跳过排名。
3. 更详细的示例:
假设我们有一个员工销售成绩表,包含以下字段:
我们将展示如何使用RANK()来按销售额为员工排名。
4. 示例 1:简单的RANK()排名
SELECT EmployeeName, SalesAmount,
RANK() OVER (ORDER BY SalesAmount DESC) AS Rank
FROM Sales;
解释:
- 我们按照SalesAmount的降序来排序。
- RANK()会为每一行分配一个排名。
结果:
说明:
- Eve的销售额最大,所以她的排名是 1。
- Bob和Carol的销售额相同,所以他们都获得了排名 2。接下来,排名跳到 4,而不是 3。
- Alice和Dave的销售额分别为 1000 和 500,他们分别排在 4 和 5。
5. 示例 2:使用PARTITION BY分区排名
如果你希望按部门对员工进行分区并在每个部门内进行排名,你可以使用PARTITION BY:
假设我们的表格现在多了一个Department字段:
你可以按部门(Department)分区并排名:
SELECT EmployeeName, Department, SalesAmount,
RANK() OVER (PARTITION BY Department ORDER BY SalesAmount DESC) AS Rank
FROM Sales;
结果:
说明:
- RANK()会在每个部门内独立排名。
- 在HR部门中,Alice排名第一,Dave排名第二。
- 在Sales部门中,Eve排名第一,Bob和Carol排名第二。
6. 总结
- RANK()可以用于为结果集中的数据排序并生成排名。
- 对于重复的值,它会分配相同的排名,但跳过后续排名。
- PARTITION BY使得可以在分组后单独生成排名,适用于按不同类别进行排名的场景。
热门推荐
大规模知识图谱的构建、推理及应用
台州葭沚老街开街,拈花湾助力长三角城市更新
2024年中国对俄罗斯农产品出口增长22%,水果、水产品等大类农产品金额大幅增长
中国南方种什么樱花好
追猎魔物新篇章!《怪物猎人 荒野》春季更新震撼来袭
为什么说腊梅在冬天里?
白银有色从事哪些业务?白银有色的业务发展受哪些因素影响?
成都地铁最新票价政策及优惠全攻略
《棋士》:人生如棋,落子无悔
如何计算保额以确保车辆的合理性?保额计算的关键因素和方法有哪些?
车辆全损保险理赔标准是多少
机械制造及自动化专业的求职者怎么撰写技能特长
青衣与花旦的区别 青衣与花旦的区别和特点
日本永居七年更新居住时长与纳税记录核心要求
牙周炎的早期症状有哪些?如何及时发现并治疗?
Qt调试功能使用方法
Qt源码调试完全指南:从基础到进阶
叶子戏:世界可考的古代扑克牌雏形,最早出现于唐代
酸奶与益生菌:揭秘两者之间的微妙关系
如何在Edge浏览器中设置代理IP地址
畅游香港铜锣湾:必游景点和美食推荐
简历照片指南:选择与注意事项
桂林籍配音演员、“周星驰御用配音”石班瑜:故人西游去也
耳朵里发出爆裂声或爆裂声:原因、治疗以及何时就医
Z世代消费新趋势:社交化与体验式营销的融合之道
从“天地板”到“地天板”!雪龙集团股价为何异动?
十分钟了解耳机的种类和优缺点
国投电力定向增发募资近70亿元 社保基金成重要股东
单位现金支出管理:原则与操作流程详解
地理类专业有哪些