一、列转行
当一行数据中,一个字段中有很多数据项,我们需要对每个数据项进行一个统计分析。
那么我们需要对字段进行行列互换。使用的lateral view explode()函数[1]
##实现图片以上的内容
##首先,得到中图结果
select 学号, 选课表 from stu
lateral view explode(split(选课表,"、") as 选课
##split(选课表,"、")得到一个array[],
##lateral view explode 这个array 按行输出,达到列转行的目的
##对每个学号进行分组统计
select 选课, count(选课) cnts
from stu
lateral view explode(split(选课表,"、") as 选课
group by 选课
order by cnts desc;
二、行转列
如果是以下的方向进行转化
select 学号, group_concat(选课,";")选课表
from stu1
group by 学号
--concat_ws(':',collection_set(选课)) ':' 表示你合并后用什么分隔,
select 学号,concat_ws(";",collection_set(选课))选课表
from stu1
group by 学号
--collect_set(stage)表示要合并表中的那一列数据
select 学号,collect_set(选课)[0] as 选课表1---将选课表中的第一个课程拿出
from stu2
group by 学号
--collect_set()和collect_list()都是对列转成行,区别就是list里面可重复而set里面是去重的
以上内容参考 https://zhuanlan.zhihu.com/p/353674984
三、语法学习
explode
lateral view explode
group_concat
concat_ws
collect_list