row_number
row_number函数用于计算行号。从1开始递增。
使用限制
窗口函数的使用限制如下:
- 窗口函数只能出现在select语句中。
- 窗口函数中不能嵌套使用窗口函数和聚合函数。
- 窗口函数不能和同级别的聚合函数一起使用。
命令格式
row_number() over([partition_clause] [orderby_clause])
参数说明
参数 |
是否必选 |
说明 |
---|---|---|
partition_clause |
否 |
指定分区。分区列的值相同的行被视为在同一个窗口内。 |
orderby_clause |
否 |
指定数据在一个窗口内如何排序。 |
返回值说明
返回DOUBLE类型的值。
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, row_number() over (partition by cookieid order by pv desc) as index from logs; -- 返回结果: cookie1 2015-04-12 7 1 cookie1 2015-04-11 5 2 cookie1 2015-04-16 4 3 cookie1 2015-04-15 4 4 cookie1 2015-04-13 3 5 cookie1 2015-04-14 2 6 cookie1 2015-04-10 1 7 cookie2 2015-04-15 9 1 cookie2 2015-04-16 7 2 cookie2 2015-04-13 6 3 cookie2 2015-04-12 5 4 cookie2 2015-04-11 3 5 cookie2 2015-04-14 3 6 cookie2 2015-04-10 2 7