Hive实现分组排序或者分页

  • 时间:
  • 浏览:0

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

4           20          450.00

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

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

初始化数据:

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

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

insert into employee values(8,50,650.00);

9           50          750.00

1           10          550.00                                 1

insert into employee values(9,50,750.00);

9           50          750.00                                 1

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

4           20          450.00                                 1

3           20          1900.00

SQL脚本:

empid       deptid      salary                                  rank

数据显示为:

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

3           20          1900.00                                 2

5           40          650.00                                 3

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

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

预期结果:

5           40          650.00

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

7           40          4450.00

6           40          1450.00                                2

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

8           50          650.00

empid       deptid      salary

8           50          650.00                                 2

2           10          450.00                                 2

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

6           40          1450.00

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

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

2           10          450.00

7           40          4450.00                                1

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

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

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

1           10          550.00