Hive实现分组排序或者分页

简介: 使用到的语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN)简单的说row_number()从1开始,为每一条分组记录返回一个数字,这里的ROW_NUMBER() OVER (ORDER BY xlh DESC) 是先把xlh列降序,再为降序以后的没条xlh记录返回一个序号。
使用到的语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN)

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

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

初始化数据:
create table employee (empid int ,deptid int ,salary decimal(10,2));

insert into employee values(1,10,5500.00);
insert into employee values(2,10,4500.00);
insert into employee values(3,20,1900.00);
insert into employee values(4,20,4800.00);
insert into employee values(5,40,6500.00);
insert into employee values(6,40,14500.00);
insert into employee values(7,40,44500.00);
insert into employee values(8,50,6500.00);
insert into employee values(9,50,7500.00);

数据显示为:
empid       deptid      salary
----------- ----------- ---------------------------------------
1           10          5500.00
2           10          4500.00
3           20          1900.00
4           20          4800.00
5           40          6500.00
6           40          14500.00
7           40          44500.00
8           50          6500.00
9           50          7500.00

需求:根据部门分组,显示每个部门的工资等级
预期结果:
empid       deptid      salary                                  rank
----------- ----------- --------------------------------------- --------------------
1           10          5500.00                                 1
2           10          4500.00                                 2
4           20          4800.00                                 1
3           20          1900.00                                 2
7           40          44500.00                                1
6           40          14500.00                                2
5           40          6500.00                                 3
9           50          7500.00                                 1
8           50          6500.00                                 2
SQL脚本:
SELECT *, row_number() OVER (partition by deptid ORDER BY salary desc) rank FROM employee

基于row_number函数也很容易实现分页:
select * from (select row_number() over (order by empid desc) as rnum ,TableName.* from TableName)t where rnum >= 1 and rnum <= 5;



目录
相关文章
|
7月前
|
SQL HIVE
【Hive SQL 每日一题】分组排名取值
创建了一个名为`sales_data`的测试表,包含商品ID、销售额和销售日期。展示了部分示例数据。接着,提供了三个SQL查询:1) 查找每个商品销售额最高的记录;2) 获取每个商品最近和最远的销售记录;3) 求每个商品距今第二近的销售记录。每个查询都利用了窗口函数来处理数据,并给出了相应的查询结果图。
98 1
|
7月前
|
SQL 存储 大数据
Hive的查询、数据加载和交换、聚合、排序、优化
Hive的查询、数据加载和交换、聚合、排序、优化
153 2
|
SQL 存储 Linux
Hive 高阶--分组窗口函数--序列分组函数(CUME_DIST)|学习笔记
快速学习 Hive 高阶--分组窗口函数--序列分组函数(CUME_DIST)
331 0
|
SQL 移动开发 开发工具
Hive 高阶--分组窗口函数--取值分组函数( LAG,LEAD,FIRST_VALUE,LAST_VALUE)|学习笔记
快速学习 Hive 高阶--分组窗口函数--取值分组函数( LAG,LEAD,FIRST_VALUE,LAST_VALUE)
548 0
|
SQL HIVE
hive:条件查询、join关联查询、分组聚合、子查询
hive:条件查询、join关联查询、分组聚合、子查询
727 0
hive:条件查询、join关联查询、分组聚合、子查询
|
SQL 存储 vr&ar
Hive 高阶--分组窗口函数--常见的分组函数(rank、denserank、rownumber、ntile)|学习笔记
快速学习 Hive 高阶--分组窗口函数--常见的分组函数(rank、denserank、rownumber、ntile)
365 0
Hive 高阶--分组窗口函数--常见的分组函数(rank、denserank、rownumber、ntile)|学习笔记
|
SQL HIVE 开发者
Hive 高阶--分组窗口函数--聚合函数集成分组函数(SUM)|学习笔记
快速学习 Hive 高阶--分组窗口函数--聚合函数集成分组函数(SUM)
334 0
|
SQL 数据挖掘 关系型数据库
Hive 高阶--分组窗口函数--OLAP 相关分组函数(GROUPING SETS,CUBE,ROLLUP)|学习笔记
快速学习 Hive 高阶--分组窗口函数--OLAP 相关分组函数(GROUPING SETS,CUBE,ROLLUP)
251 0
Hive 高阶--分组窗口函数--OLAP 相关分组函数(GROUPING SETS,CUBE,ROLLUP)|学习笔记
|
SQL HIVE
HIVE基本查询操作(二)——第1关:Hive排序
HIVE基本查询操作(二)——第1关:Hive排序
644 0