
# rank
rank函数用于计算一个值在一组值中的排位。如果出现并列的情况，RANK函数会在排名序列中留出空位。
#### 使用限制
窗口函数的使用限制如下：
- 窗口函数只能出现在select语句中。
- 窗口函数中不能嵌套使用窗口函数和聚合函数。
- 窗口函数不能和同级别的聚合函数一起使用。
 
#### 命令格式
```
rank() over ([partition_clause] [orderby_clause])
```
#### 参数说明
表1参数说明 
| 参数               | 是否必选 | 说明                        |
|:---|:---|:---|
| partition_clause | 否    | 指定分区。分区列的值相同的行被视为在同一个窗口内。 |
| orderby_clause   | 否    | 指定数据在一个窗口内如何排序。           |
   
#### 返回值说明
返回INT类型的值。
![](https://support.huaweicloud.com/sqlref-spark-dli/public_sys-resources/note_3.0-zh-cn.png)
a为NULL，则返回NULL。
#### 示例代码
为便于理解函数的使用方法，本文为您提供源数据，基于源数据提供函数相关示例。创建表logs，并添加数据，命令示例如下：
```
CREATE TABLE logs (
cookieid string,
createtime string,
pv INT
) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' 
stored as textfile;
```
添加数据如下：
```
cookie1 2015-04-10 1
cookie1 2015-04-11 5
cookie1 2015-04-12 7
cookie1 2015-04-13 3
cookie1 2015-04-14 2
cookie1 2015-04-15 4
cookie1 2015-04-16 4
cookie2 2015-04-10 2
cookie2 2015-04-11 3
cookie2 2015-04-12 5
cookie2 2015-04-13 6
cookie2 2015-04-14 3
cookie2 2015-04-15 9
cookie2 2015-04-16 7
```
示例：将所有记录根据cookieid分组，并按pv降序排列，返回组内每行的序号。命令示例如下:
```
select cookieid, createtime, pv,
       rank() over(partition by cookieid order by pv desc) as rank
from logs
where cookieid = 'cookie1';
-- 结果：
cookie1 2015-04-12 7 1
cookie1 2015-04-11 5 2
cookie1 2015-04-16 4 3 (并列第三)
cookie1 2015-04-15 4 3
cookie1 2015-04-13 3 5 (跳过4，从5开始)
cookie1 2015-04-14 2 6
cookie1 2015-04-10 1 7
```
