SQL SQL Server 分组排序函数 Rank()

SQL SQL Server 分组排序函数 Rank()

在本文中,我们将介绍 SQL Server 中的分组排序函数 Rank(),并详细说明其用法和示例。

阅读更多:SQL 教程

什么是 Rank() 函数?

Rank() 函数是 SQL Server 中一个非常有用的分组排序函数。它用于在一个分组中对数据进行排序,并为每个行分配一个排名序号。这个排名序号可以根据排序的规则进行升序或降序排列。由于 Rank() 函数依赖于分组并为每个分组分配排名序号,所以它经常与其他聚合函数一起使用。

Rank() 函数的语法

Rank() 函数的基本语法如下:

RANK() OVER (PARTITION BY column1, column2,... ORDER BY column3 [ASC|DESC])
SQL
  • RANK():表示 Rank() 函数本身;
  • OVER (PARTITION BY column1, column2,…):表示按照指定的列进行分组;
  • ORDER BY column3 [ASC|DESC]:表示按照指定的列进行排序,可以选择升序(ASC,默认)或降序(DESC)。

Rank() 函数的示例

为了更好地理解 Rank() 函数的用法,让我们使用一个示例来进行演示。假设我们有一个学生成绩表格,包括学生姓名、科目和成绩三个字段。我们想要为每个科目中的学生成绩进行排序,并按照成绩高低给每个学生分配一个排名。

首先,让我们创建一个示例表格并插入一些数据:

CREATE TABLE scores (
    student_name VARCHAR(50),
    subject VARCHAR(50),
    score INT
);

INSERT INTO scores (student_name, subject, score) VALUES 
    ('Alice', 'Math', 80),
    ('Bob', 'Math', 90),
    ('Alice', 'Science', 75),
    ('Bob', 'Science', 85),
    ('Alice', 'English', 95),
    ('Bob', 'English', 70);
SQL

现在,我们可以使用 Rank() 函数来为每个科目中的学生成绩进行排名,示例代码如下:

SELECT 
    student_name,
    subject,
    score,
    RANK() OVER (PARTITION BY subject ORDER BY score DESC) AS ranking
FROM 
    scores;
SQL

此查询将返回一个包含每个学生姓名、科目、成绩和排名的结果集。排名将根据每个科目的成绩降序进行排列。

student_name subject score ranking
Alice Math 80 2
Bob Math 90 1
Alice Science 75 2
Bob Science 85 1
Alice English 95 1
Bob English 70 2

从上述结果可以看出,每个学生在每个科目中都被分配了一个排名序号。例如,在数学科目中,Bob 的成绩最高,因此获得了排名 1,而 Alice 的成绩次高,因此获得了排名 2。

更复杂的 Rank() 函数示例

除了基本用法之外,Rank() 函数还可以与其他函数和子查询一起使用,以实现更复杂的功能。让我们看两个更复杂的示例来说明这一点。

示例 1:获取每个科目中的前两名学生

假设我们想要找出每个科目中成绩前两名的学生。此时,我们可以在外部查询中使用 Rank() 函数,并在内部查询中使用 WHERE 条件限制排名为 1 或 2 的学生。示例代码如下:

SELECT
    student_name,
    subject,
    score
FROM
    (
    SELECT
        student_name,
        subject,
        score,
        RANK() OVER (PARTITION BY subject ORDER BY score DESC) AS ranking
    FROM
        scores
    )
WHERE
    ranking <= 2;
SQL

此查询将返回每个科目中成绩前两名的学生信息。

示例 2:为相同成绩的学生分配相同排名

有时候,我们可能需要为相同成绩的学生分配相同的排名。在 SQL Server 中,Rank() 函数可以与 DENSE_RANK() 函数一起使用来实现这个目的。示例代码如下:

SELECT 
    student_name,
    subject,
    score,
    RANK() OVER (PARTITION BY subject ORDER BY score DESC) AS ranking,
    DENSE_RANK() OVER (PARTITION BY subject ORDER BY score DESC) AS dense_ranking
FROM 
    scores;
SQL

在上面的查询中,我们使用 Rank() 函数为每个学生分配排名,并将结果存储在 ranking 列中。同时,我们还使用 DENSE_RANK() 函数为每个学生分配密集排名,并将结果存储在 dense_ranking 列中。相同成绩的学生将会得到相同的排名和密集排名。

总结

在本文中,我们介绍了 SQL Server 中的分组排序函数 Rank() 的用法和示例。Rank() 函数可以根据指定的列对数据进行排序,并为每个行分配一个排名序号。此函数对于需要根据特定规则对数据进行排名和分组的情况非常有用。同时,我们还介绍了 Rank() 函数与其他函数和子查询的搭配使用,以及一些复杂示例的实现。希望本文对你理解 Rank() 函数在 SQL Server 中的应用有所帮助。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册