SQL Server RANK() 函数使用指南
在 SQL 中,RANK() 函数用于为结果集中的行分配排名,根据指定的排序条件按升序或降序排列,排名结果可以用于生成排名报告、计算百分位数等。RANK() 函数是 SQL:2003 标准中定义的函数之一,可以在多种数据库管理系统中使用,包括 SQL Server 。
语法
RANK() 函数的语法如下:
RANK() OVER (
    [PARTITION BY partition_expression, ... ]
    ORDER BY sort_expression [ASC | DESC], ...
)
其中,PARTITION BY 和 ORDER BY 是必需的,ASC 和 DESC 表示升序和降序。
使用场景
RANK() 函数通常用于需要对数据进行排名的场景,如计算竞赛中的得分排名、销售排名、学生成绩排名等。它可以与其他函数(如 SUM()、AVG() 等)结合使用,以生成更多的汇总信息。
示例
下面提供两个 RANK() 函数的示例:
示例 1
假设有一个名为 Scores 的表,包含学生姓名、考试科目和分数等字段,我们需要计算每个科目的前三名学生的排名。
SELECT
    Subject,
    Name,
    Score,
    RANK() OVER (
        PARTITION BY Subject
        ORDER BY Score DESC
    ) AS Rank
FROM Scores
WHERE Rank <= 3;
执行以上 SQL 语句后,会得到以下结果:
| Subject | Name | Score | Rank | 
|---|---|---|---|
| Math | John | 98 | 1 | 
| Math | Tom | 95 | 2 | 
| Math | Jack | 92 | 3 | 
| English | Mary | 89 | 1 | 
| English | Ann | 87 | 2 | 
| English | Bob | 84 | 3 | 
以上结果显示了每个科目的前三名学生的姓名、分数和排名。
示例 2
假设有一个学生成绩表(Scores),包含学生的 ID 和成绩信息,如下所示:
| ID | Score | 
|---|---|
| 1 | 80 | 
| 2 | 95 | 
| 3 | 75 | 
| 4 | 85 | 
| 5 | 90 | 
| 6 | 75 | 
现在我们想要对学生的成绩进行排名,同时处理并列的情况,可以使用 RANK()函数来实现。以下是实现的 SQL 代码:
SELECT ID, Score, RANK() OVER (ORDER BY Score DESC) AS Rank
FROM Scores;
执行以上 SQL 语句后,会得到以下结果:
| ID | Score | Rank | 
|---|---|---|
| 2 | 95 | 1 | 
| 5 | 90 | 2 | 
| 4 | 85 | 3 | 
| 1 | 80 | 4 | 
| 3 | 75 | 5 | 
| 6 | 75 | 5 | 
从结果可以看出,学生的成绩按照降序排列,并且处理了成绩相同的情况。其中,排名并列的学生都被赋予了相同的排名。
结论
本文介绍了 SqlServer 中的 RANK() 函数,该函数可以用于对数据进行排名,并处理并列的情况。 RANK() 函数的语法比较简单,使用方便。在实际应用中,该函数可以用于各种排名场景,如竞赛成绩排名、销售额排名等等。