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使得可以在分组后单独生成排名,适用于按不同类别进行排名的场景。
热门推荐
爱因斯坦:科学巨匠与人文精神的典范
咳嗽时吃什么水果好?这些水果能润肺止咳
邮寄笔记本电脑到澳大利亚
交通事故责任认定书:自己去拿还是等通知?
吃什么可以提高人体免疫力和抵抗力
高尔夫车的安全性能如何保障?这种安全性能的提升有哪些方法?
美食绘本,寓教于乐的童年佳品——《中国味道》绘本浅读
道教修行,其实是一个“借假修真”的过程
《洛克王国:世界》精灵属性克制介绍
去医院抽血挂什么科
面包机菜单键无响应的解决方法
使用软电话需要哪些硬件支持?常见问题答疑
日常生活就能培养“数感力”,幼儿园到中年级都适用!
广西第一、广东第二、中国第七大姓氏,黄姓宗亲集合了
2025年宝宝起名时,如何平衡传统和文化创新?
再续"秦晋之好" 大西高铁开通十周年累计发送旅客超2.5亿次
矛盾而伟大的帝王:拓跋珪
如何科学延长电动车电池寿命:用户体验分享与实际数据解析
如何组织团队讨论?七个步骤助你提升团队协作效率
烹饪秘诀揭秘,探索油温极致温度边界
都市辛酸与诗意梦想——王光卫《踏莎行·网约车》深度赏析
如何通过财务报表优化降低税负
深入解析:炎症性疾病的表观遗传调控机制与治疗策略
玉帝是誰?中國神話中的至高神明解析
铁路重点旅客服务新规今起实施,将为残疾人携带导盲犬提供便利
如何优雅拒绝同事的社交活动邀请?这些建议很实用
单片机用什么系统开发
服务器文件完整性检查
想秀髮健康?營養師教你這樣吃
九蒸九晒黄精:传统瑰宝的价值