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

  1. lateral view explode

  1. group_concat

  1. concat_ws

  1. collect_list

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值