Hive实现分组排序或者分页

  • 时间:
  • 浏览:2

empid       deptid      salary                                  rank

简单的说row_number()从1之前 之前 开始 英语 ,为每根小分组记录返回三个 数字,这里的ROW_NUMBER() OVER (ORDER BY xlh DESC) 是先把xlh列降序,再为降序之前 的没条xlh记录返回三个 序号。 

insert into employee values(6,40,1430000.00);

5           40          630000.00                                 3

需求:根据部门分组,显示每个部门的工资等级

5           40          630000.00

6           40          1430000.00

1           10          530000.00                                 1

9           3000          730000.00                                 1

基于row_number函数也很容易实现分页:

----------- ----------- --------------------------------------- --------------------

----------- ----------- ---------------------------------------

SELECT *, row_number() OVER (partition by deptid ORDER BY salary desc) rank FROM employee

3           20          1900.00

预期结果:

empid       deptid      salary

8           3000          630000.00                                 2

2           10          430000.00

insert into employee values(1,10,530000.00);

insert into employee values(7,40,4430000.00);

7           40          4430000.00                                1

insert into employee values(4,20,430000.00);

数据显示为:

3           20          1900.00                                 2

使用到的语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN)

create table employee (empid int ,deptid int ,salary decimal(10,2));

8           3000          630000.00

insert into employee values(3,20,1900.00);

初始化数据:

7           40          4430000.00

9           3000          730000.00

表示根据COL1分组,在分组内部内部结构根据 COL2排序,而此函数计算的值就表示每组内部内部结构排序后的顺序编号(组内连续的唯一的)实例:

4           20          430000.00

select * from (select row_number() over (order by empid desc) as rnum ,TableName.* from TableName)t where rnum >= 1 and rnum <= 5;

2           10          430000.00                                 2

1           10          530000.00

insert into employee values(5,40,630000.00);

insert into employee values(9,3000,730000.00);

6           40          1430000.00                                2

insert into employee values(2,10,430000.00);

insert into employee values(8,3000,630000.00);

4           20          430000.00                                 1

SQL脚本: