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使得可以在分组后单独生成排名,适用于按不同类别进行排名的场景。
热门推荐
银行账户销户全攻略:流程详解与注意事项
公允价值的确定方法有哪些?这些方法在实际应用中有哪些限制?
胰腺肿瘤怎么知道恶性还是良性
四季食单:春夏秋冬的美食选择
偏光板试验条件详解
十类爬华山必备物品有哪些 去爬华山需要准备什么
易经中的两仪四象八卦:从基础概念到宇宙规律
白玉木耳、普通木耳与黑木耳的区别及食用功效对比分析
探店经济,新风口还是泡沫?深度解析背后的商业逻辑
适合花园地栽的植物 常见地被植物有哪些
适合种什么草坪?11种常见草坪类型详解
避坑指南丨诉讼代理知多少?
如何看懂板块轮动:从宏观到微观的投资决策分析
游戏设计中的“补充规则”:原理与应用
什么是IoT?一文详解物联网的概念与应用
青襟不改,齐云之志——安徽籍道长程定远的抗日救国传奇
《忆江南词三首》:白居易笔下的江南情愫,穿越时空的诗意画卷
be like 和look like的区别
喝酒助眠不如吃香蕉,吃这几类食物的人睡得更香
新冠疫情结束时间公布,全球抗疫迎来曙光
一文读懂个税年度汇算!小白也能秒懂~
最新公布!去年上海户籍60岁及以上老年人逾568万,占户籍总人口37.4%
设计思维的五个阶段,设计基础知识科普!
口臭怎么办?三步改善口腔异味
未来最吃香的冷门专业 哪些专业小众但好就业
高校美育课堂进社区 首都高校与社区建艺术共享平台
压缩空气管道材质对比:不锈钢VS镀锌铁,谁更胜一筹?
模型 SWOT分析
造成母乳性黄疸的原因有哪些
SSD固态硬盘选购指南:种类、注意事项及产品推荐