0


sql行列转换

一、列转行

当一行数据中,一个字段中有很多数据项,我们需要对每个数据项进行一个统计分析。

那么我们需要对字段进行行列互换。使用的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

三、语法学习

  1. explode

  2. lateral view explode

  3. group_concat

  4. concat_ws

  5. collect_list

标签: sql

本文转载自: https://blog.csdn.net/weixin_43862728/article/details/129540869
版权归原作者 songxiaozhuo 所有, 如有侵权,请联系我们删除。

“sql行列转换”的评论:

还没有评论