更新时间:2023-12-21 GMT+08:00

rank

rank函数用于计算一个值在一组值中的排位。如果出现并列的情况,RANK函数会在排名序列中留出空位。

使用限制

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

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

命令格式

rank() over ([partition_clause] [orderby_clause])

参数说明

表1 参数说明

参数

是否必选

说明

partition_clause

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

orderby_clause

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

返回值说明

返回INT类型的值。

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