percent_rank
percent_rank函数为窗口的ORDER BY子句所指定列中值的返回值,但以介于0和1之间的小数形式表示,计算方法为 (分组内当前行的RANK值-1)/(分组内总行数-1)。
使用限制
窗口函数的使用限制如下:
- 窗口函数只能出现在select语句中。
- 窗口函数中不能嵌套使用窗口函数和聚合函数。
- 窗口函数不能和同级别的聚合函数一起使用。
命令格式
percent_rank() over([partition_clause] [orderby_clause])
参数说明
参数 |
是否必选 |
说明 |
---|---|---|
partition_clause |
否 |
指定分区。分区列的值相同的行被视为在同一个窗口内。 |
orderby_clause |
否 |
指定数据在一个窗口内如何排序。 |
返回值说明
返回DOUBLE类型的值。
示例代码
示例数据
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