问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

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使得可以在分组后单独生成排名,适用于按不同类别进行排名的场景。
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号