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
0
。 NULL
值默认包含,并被视为可能的最低值。
PERCENT_RANK
具有不确定性。 有关详细信息,请参阅确定性函数和不确定性函数。
示例
本文中的 Transact-SQL 代码示例使用 AdventureWorks2022
或 AdventureWorksDW2022
示例数据库,可从 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