SQL Server 的 PERCENT_RANK 是分析函数之一,它将计算每行的相对排名。此函数将返回一个介于 0(不含)和 1(不含)之间的范围内的排名。PERCENT_RANK 的基本语法是:
SELECT PERCENT_RANK()
OVER (
PARTITION_BY_Clause
ORDER_BY_Clause
)
FROM [Source]
我们将使用下面显示的数据进行演示。

不带 PARTITION BY 子句的 SQL PERCENT_RANK
在此示例中,我们将展示省略 PERCENT_RANK 函数中的 PARTITION BY 子句会发生什么情况。
SELECT [FirstName]
,[LastName]
,[Education]
,[Occupation]
,[YearlyIncome]
,[Sales]
,PERCENT_RANK() OVER (ORDER BY [Sales] ASC) AS PercentRank
FROM [Employee]

ORDER BY 子句按销售金额升序对 Employee 表进行排序。
ORDER BY [Sales] ASC
接下来,PERCENT_RANK 函数将输出百分比排名。在此,销售额最高的行的排名为 1,销售额最低的行的百分位排名为 0。
PERCENT_RANK() OVER (ORDER BY [Sales] ASC) AS PercentRank
我将 ORDER BY 子句从升序更改为降序。如您所见,它将最低值排名为 1,将最高值排名为 0。
SELECT [FirstName]
,[LastName]
,[Education]
,[Occupation]
,[YearlyIncome]
,[Sales]
,PERCENT_RANK() OVER (ORDER BY [Sales] DESC) AS PercentRank
FROM [Employee]

带 PARTITION BY 的 SQL PERCENT_RANK 示例
如何返回分区记录的百分比排名?下面的 PERCENT_RANK 查询将按职业对数据进行分区,然后为每个分区独立写入百分比排名。
SELECT [FirstName]
,[LastName]
,[Education]
,[Occupation]
,[YearlyIncome]
,[Sales]
,PERCENT_RANK() OVER (
PARTITION BY [Occupation]
ORDER BY [Sales] ASC
) AS PercentRank
FROM [Employee]

为确保您理解清楚,我们将SQL Server的分组值从“职业”更改为“教育程度”。
SELECT [FirstName]
,[LastName]
,[Education]
,[Occupation]
,[YearlyIncome]
,[Sales]
,PERCENT_RANK() OVER (
PARTITION BY [Education]
ORDER BY [Sales] ASC
) AS PercentRank
FROM [Employee]

评论已关闭。