rank
rank函数用于计算一个值在一组值中的排位。如果出现并列的情况,RANK函数会在排名序列中留出空位。
使用限制
窗口函数的使用限制如下:
- 窗口函数只能出现在select语句中。
- 窗口函数中不能嵌套使用窗口函数和聚合函数。
- 窗口函数不能和同级别的聚合函数一起使用。
命令格式
rank() over ([partition_clause] [orderby_clause])
参数说明
参数 |
是否必选 |
说明 |
---|---|---|
partition_clause |
否 |
指定分区。分区列的值相同的行被视为在同一个窗口内。 |
orderby_clause |
否 |
指定数据在一个窗口内如何排序。 |
返回值说明
返回INT类型的值。
a为NULL,则返回NULL。
示例代码
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