
# 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
```
