更新时间:2023-11-30 GMT+08:00

percent_rank

percent_rank函数为窗口的ORDER BY子句所指定列中值的返回值,但以介于0和1之间的小数形式表示,计算方法为 (分组内当前行的RANK值-1)/(分组内总行数-1)。

使用限制

窗口函数的使用限制如下:

  • 窗口函数只能出现在select语句中。
  • 窗口函数中不能嵌套使用窗口函数和聚合函数。
  • 窗口函数不能和同级别的聚合函数一起使用。

命令格式

percent_rank() over([partition_clause] [orderby_clause])

参数说明

表1 参数说明

参数

是否必选

说明

partition_clause

指定分区。分区列的值相同的行被视为在同一个窗口内。

orderby_clause

指定数据在一个窗口内如何排序。

返回值说明

返回DOUBLE类型的值。

示例代码

示例数据

为便于理解函数的使用方法,本文为您提供源数据,基于源数据提供函数相关示例。创建表salary,并添加数据,命令示例如下:
CREATE EXTERNAL TABLE salary (
dept STRING, -- 部⻔名称
userid string, -- 员⼯ID
sal INT -- 薪⽔
) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' 
stored as textfile;

添加数据如下:

d1,user1,1000
d1,user2,2000
d1,user3,3000
d2,user4,4000
d2,user5,5000

示例:计算员工薪水在部门内的百分比排名。

select dept, userid, sal,
       percent_rank() over(partition by dept order by sal) as pr2
from salary;
-- 结果分析:
d1 user1 1000 0.0    -- (1-1)/(3-1)=0.0
d1 user2 2000 0.5    -- (2-1)/(3-1)=0.5
d1 user3 3000 1.0    -- (3-1)/(3-1)=1.0
d2 user4 4000 0.0    -- (1-1)/(2-1)=0.0
d2 user5 5000 1.0    -- (2-1)/(2-1)=1.0