列转行案列:现在有这样一份数据:
exercise_topn.txt
需求:
求出每种爱好中,年龄最大的两个人(爱好,年龄,姓名)注意思考一个问题:如果某个爱好中的第二大年龄
有多个相同的怎么办?
其中需要注意的是:每一条记录中的爱好有多个值,以"-"分隔
id,姓名,年龄,爱好
id,name,age,favors
1,huangxiaoming,45,a-c-d-f
2,huangzitao,36,b-c-d-e
3,huanglei,41,c-d-e
4,liushishi,22,a-d-e
5,liudehua,39,e-f-d
6,liuyifei,35,a-d-e
思路总结:
1.先把爱好拆分成一条一条的数据,行转列我们可以用explode() + lateral view
2.按照爱好进行分组年龄进行排序取rownum<=2 我们可以用rownum over()
实现
1.select a.id,a.name,a.age, favor_view as favor from exercise_topn a
alter view explode(split(a.favors,“-”)) favor_view as favor;
转