更新时间:2023-11-30 GMT+08:00

row_number

row_number函数用于计算行号。从1开始递增。

使用限制

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

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

命令格式

row_number() over([partition_clause] [orderby_clause])

参数说明

表1 参数说明

参数

是否必选

说明

partition_clause

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

orderby_clause

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

返回值说明

返回DOUBLE类型的值。

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,
       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