举例说明SQL服务器等级功能

156 阅读3分钟

在处理数据时,有一个基本的需要,那就是对各种记录进行分类或排名。例如,你可以根据团队的分数进行排名,根据员工的工资进行排名,以及更多。

我们大多数人都使用返回单一数值的函数进行计算。在本指南中,我们将探讨如何使用SQL Server rank函数来返回一个特定行组的集合值。

SQL Server Rank()函数:基础知识

rank()函数是SQL Server窗口函数的一部分。它的工作原理是为结果集的特定分区的每条行分配一个等级。

该函数为类似分区中的行分配相同的等级值。它分配了第一个等级,值为1,然后给每个等级增加一个连续值。

rank函数的语法是这样的。

rank OVER (
        [partition BY expression],
        ORDER BY expression [ASC|DESC]
);

让我们来分析一下上述语法。

partition by子句将行划分为特定的分区,在这些分区中应用rank函数。例如,在一个包含雇员数据的数据库中,你可以根据他们工作的部门来划分行。

接下来的子句,ORDER BY,定义了在指定分区中组织行的顺序。

SQL Server Rank()函数。实际用法

让我们举一个实际的例子来了解如何在SQL Server中使用rank()函数。

首先,创建一个包含雇员信息的样本表。

CREATE TABLE developers(
        id INT IDENTITY(1,1), NOT a NULL PRIMARY KEY,
        name VARCHAR(200) NOT NULL,
        department VARCHAR(50),
        salary money
);

接下来,向表中添加一些数据。

INSERT INTO developers(name, department, salary)
VALUES ('Rebecca', 'Game Developer',$120000 ),
      ('James', 'Mobile Developer', $110000),
           ('Laura', 'DevOps Developer', $180000),
           ('Quill', 'Mobile Developer', $109000),
           ('John', 'Full-Stack Developer', $182000),
           ('Matthew', 'Game Developer', $140000),
           ('Caitlyn', 'DevOps Developer',$123000),
           ('Michelle', 'Data Science Developer', $204000),
           ('Antony', 'Front-End Developer', $103100),
           ('Khadija', 'Backend Developer', $193000),
           ('Joseph', 'Game Developer', $11500);
SELECT * FROM developers;

你应该有一个表,其中的记录如图所示。

例1:按顺序排列

使用rank函数来给数据分配等级。一个查询的例子如图所示。

SELECT *, rank()  OVER (ORDER BY department) AS rank_number FROM developers;

上面的查询应该给出如图所示的输出。

上面的输出显示,该函数为来自相似部门的行分配了相似的等级值。注意到函数跳过了一些等级值,这取决于具有相同等级的数值的数量。

例如,从等级7开始,函数跳到等级10,因为等级8和9被分配给了两个连续的等级7的值。

例子 2: 分区法

考虑一下下面的例子。它使用rank函数给同一部门的开发人员分配了一个等级。

SELECT *, rank() OVER (partition BY department ORDER BY salary DESC) AS rank_number FROM developers;

上面的查询首先根据部门对行进行分区。接下来,order by子句将每个分区中的记录按工资降序排序。

结果输出如图所示:

结论

在本指南中,我们介绍了如何使用SQL Server中的rank函数,允许你对行进行分区和排序。