您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息
三六零分类信息网 > 梧州分类信息网,免费分类信息发布

hive中使用标准sql实现分组内排序

2024/3/16 9:05:08发布24次查看
hive中使用标准sql实现分组内排序 在hive中,想要实现分组内排序,一般都是自己写udf实现oracle中分析函数row_number() over(partition)的功能,如果不使用自定义udf,仅使用标准sql实现的话,毫无性能可言,仅做实验而已。 方便起见,以下语句为oracle中语句
hive中使用标准sql实现分组内排序
在hive中,想要实现分组内排序,一般都是自己写udf实现oracle中分析函数row_number() over(partition)的功能,如果不使用自定义udf,仅使用标准sql实现的话,毫无性能可言,仅做实验而已。
方便起见,以下语句为oracle中语句,但都属于标准sql,在hive中亦可:
sql代码  
create table lxw_t (user_id varchar2(20),  
class varchar2(20),  
score number   
);
sql代码  
insert into liuxiaowen.lxw_t values ('user_1','语文','90');  
insert into liuxiaowen.lxw_t values ('user_1','数学','86');  
insert into liuxiaowen.lxw_t values ('user_1','英语','96');  
insert into liuxiaowen.lxw_t values ('user_1','体育','77');  
insert into liuxiaowen.lxw_t values ('user_2','语文','88');  
insert into liuxiaowen.lxw_t values ('user_2','数学','65');  
insert into liuxiaowen.lxw_t values ('user_2','英语','67');  
insert into liuxiaowen.lxw_t values ('user_2','体育','98');
commit;
sql代码  
select x.user_id,x.class,x.score,count(1) as seq   
from (  
  select a.*,b.score score2 from   
  liuxiaowen.lxw_t a ,  
  liuxiaowen.lxw_t b   
  where a.user_id = b.user_id (+)   
) x   
where x.score2 >= x.score --按照成绩由高到低排列  
--where x.score >= x.score2  --按照成绩由低到高排列  
group by x.user_id,x.class,x.score   
order by 1,4
按照成绩由高到低排列的结果如下:
sql代码  
user_id class   score   seq  
user_1  英语  96  1  
user_1  语文  90  2  
user_1  数学  86  3  
user_1  体育  77  4  
user_2  体育  98  1  
user_2  语文  88  2  
user_2  英语  67  3  
user_2  数学  65  4
按照成绩由低到高排列的结果如下:
sql代码  
user_id class   score   seq  
user_1  体育  77  1  
user_1  数学  86  2  
user_1  语文  90  3  
user_1  英语  96  4  
user_2  数学  65  1  
user_2  英语  67  2  
user_2  语文  88  3  
user_2  体育  98  4
梧州分类信息网,免费分类信息发布

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录