对比mysql和hive:分组,取不同组前几条记录-explode函数的使用

网友投稿 874 2022-10-10

对比mysql和hive:分组,取不同组前几条记录-explode函数的使用

对比mysql和hive:分组,取不同组前几条记录-explode函数的使用

1、数据源如下

id,name,age,favors(爱好)1,huangxiaoming,45,a-c-d-f2,huangzitao,36,b-c-d-e3,huanglei,41,c-d-e4,liushishi,22,a-d-e5,liudehua,39,e-f-d6,liuyifei,35,a-d-e

2、建表语句

create table mian6( id int, name string, age int, favors string)row format delimited fields terminated by ",";

3、加载数据

load data local inpath "/home/hadoop/apps/mian6.txt" into table mian6;

4、需求如下

求出每种爱好中,年龄最大的两个人(爱好,年龄,姓名)

5、实现步骤如下

1)创建一个表mian6_1,存储使用explode炸裂favors后的结果。

create table mian6_1 asselect m.id id, m.name name, m.age age, m.favors favors, tf.hobby hobbyfrom mian6 mlateral view explode(split(m.favors,"-")) tf as hobby;

explode炸裂favors后的结果如下:

2)查询出,每个兴趣内部的排名(每个兴趣内部,按照age降序排列)。

select m.hobby, m.name name, m.age age, m.favors favors, row_number() over(partition by hobby order by age desc) indexfrom mian6_1 m;

查询结果如下:

3)在第二步的基础上,挑选出每个兴趣内部,排名前二的2条记录。

select a.hobby, a.name, a.age, a.favorsfrom (select m.name name,m.hobby hobby,m.age age,m.favors favors,row_number() over(partition by hobby order by age desc) indexfrom mian6_1 m)awhere a.index<=2;

查询结果如下:

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:IOV Weave - 用于构建Tendermint ABCI应用程序,易于使用的框架(iov客户端)
下一篇:对比mysql和hive:mysqlzhong ,分组求不同组的前几条记录
相关文章

 发表评论

暂时没有评论,来抢沙发吧~