PERCENT_RANK (Transact-SQL)

适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Microsoft Fabric 中的 SQL 分析终结点 Microsoft Fabric 中的仓库

计算 SQL Server 中一组行内某行的相对排名。 用于 PERCENT_RANK 计算查询结果集或分区中某个值的相对地位。 PERCENT_RANK 类似于 CUME_DIST 函数。

语法

PERCENT_RANK( )
    OVER ( [ partition_by_clause ] order_by_clause )

参数

OVER ( [ partition_by_clause ] order_by_clause )

第一个参数 partition_by_clause将子句生成的 FROM 结果集划分为应用函数的分区。 如果未指定,则此函数将查询结果集的所有行视为单个组。 第二个参数 order_by_clause确定执行操作的逻辑顺序。 需要 order_by_clause。 <rows or range clause> OVER不能在函数中PERCENT_RANK指定语法。 有关详细信息,请参阅 SELECT - OVER 子句

返回类型

float(53)

注解

返回 PERCENT_RANK 的值范围大于 0 和小于或等于 1。 任何集中的第一行都有一个 PERCENT_RANK 0NULL 值默认包含,并被视为可能的最低值。

PERCENT_RANK 具有不确定性。 有关详细信息,请参阅确定性函数和不确定性函数

示例

本文中的 Transact-SQL 代码示例使用 AdventureWorks2022AdventureWorksDW2022 示例数据库,可从 Microsoft SQL Server 示例和社区项目主页下载它。

以下示例使用 CUME_DIST 函数计算给定部门中每个员工的工资百分位数。 该函数返回 CUME_DIST 的值表示同一部门中工资小于或等于当前雇员的员工的百分比。 该 PERCENT_RANK 函数将员工在部门内的工资排名计算为百分比。 指定子 PARTITION BY 句以按部门对结果集中的行进行分区。 子 ORDER BY 句中的 OVER 子句对每个分区中的行进行排序。 ORDER BY语句中的SELECT子句对整个结果集中的行进行排序。

USE AdventureWorks2022;
GO

SELECT Department,
    LastName,
    Rate,
    CUME_DIST() OVER (PARTITION BY Department ORDER BY Rate) AS CumeDist,
    PERCENT_RANK() OVER (PARTITION BY Department ORDER BY Rate) AS PctRank
FROM HumanResources.vEmployeeDepartmentHistory AS edh
INNER JOIN HumanResources.EmployeePayHistory AS e
    ON e.BusinessEntityID = edh.BusinessEntityID
WHERE Department IN (N'Information Services', N'Document Control')
ORDER BY Department, Rate DESC;

结果集如下。

Department             LastName               Rate              CumeDist           PctRank
---------------------- ---------------------- ----------------- ------------------ ------------------
Document Control       Arifin                 17.7885           1                  1
Document Control       Norred                 16.8269           0.8                0.5
Document Control       Kharatishvili          16.8269           0.8                0.5
Document Control       Chai                   10.25             0.4                0
Document Control       Berge                  10.25             0.4                0
Information Services   Trenary                50.4808           1                  1
Information Services   Conroy                 39.6635           0.9                0.888888888888889
Information Services   Ajenstat               38.4615           0.8                0.666666666666667
Information Services   Wilson                 38.4615           0.8                0.666666666666667
Information Services   Sharma                 32.4519           0.6                0.444444444444444
Information Services   Connelly               32.4519           0.6                0.444444444444444
Information Services   Berg                   27.4038           0.4                0
Information Services   Meyyappan              27.4038           0.4                0
Information Services   Bacon                  27.4038           0.4                0
Information Services   Bueno                  27.4038           0.4                0