SQL PERCENT_RANK 函数

SQL Server 的 PERCENT_RANK 是分析函数之一,它将计算每行的相对排名。此函数将返回一个介于 0(不含)和 1(不含)之间的范围内的排名。PERCENT_RANK 的基本语法是:

SELECT PERCENT_RANK() 
               OVER (
                      PARTITION_BY_Clause 
                      ORDER_BY_Clause
                     )
FROM [Source]

我们将使用下面显示的数据进行演示。

Employee Table 0

不带 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]
SQL PERCENT_RANK Order By Ascending 1

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]
PERCENT_RANK Order By Descending 2

带 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]
With Partition 3

为确保您理解清楚,我们将SQL Server的分组值从“职业”更改为“教育程度”。

SELECT [FirstName]
      ,[LastName]
      ,[Education]
      ,[Occupation]
      ,[YearlyIncome]
      ,[Sales]
      ,PERCENT_RANK() OVER (
			     PARTITION BY [Education]
			     ORDER BY [Sales] ASC
			    ) AS PercentRank 
  FROM [Employee]
SQL PERCENT_RANK With Partition 4

评论已关闭。