当前位置:Gxlcms > 数据库问题 > MYSQL/HIVESQL笔试题:HIVESQL(一)分组求TopN/行转列/列转行

MYSQL/HIVESQL笔试题:HIVESQL(一)分组求TopN/行转列/列转行

时间:2021-07-01 10:21:17 帮助过:33人阅读

=数学 then score end) as math, sum(case when item=英语 then score end) as english, From table Group by name

三、解析:首先写出select name from table group by name, 因为select后有几个字段,最终输出就是几个字段,所以我们需要把目标数据的”math”和“english”两个字段想办法得出来。

之后可以对item字段所有枚举的结果进行case when判断,将score填值进入,因为最后我们需要对name做一下聚合,需要明确的是一般选取字段一定要出现在groupby里面。

聚合函数可以不用,所以我们在外面套一层sum做聚合,这样得到sum的结果和单人得分结果是一致的,因为我们以name做了一遍聚合,而每个用户对一门课程只有一个成绩,所以这样就可以得到最终结果。

3 将“表-4”的内容转换为“表-3”的内容

select table_4.name,
a.item,
a.score
from table_4
lateral view explode(
str_to_map(concat(math=,math,&english=,english),&,=)
) a as item,score;

解析:首先使用str_to_map函数将math字段与english字段拼接后的结果转换为map类型,然后通过侧视图和explode函数将其爆炸开,给生成的临时侧视图一个名字,取名a并给列名取名为item,score,因为explode(map)爆炸的结果是每一个item为行,key为1列,value为1列,这样就恰好形成我们想要的结果。这个示例理解起来稍微有点难度,大家不熟悉这些函数的用法的话,可以首先熟悉一下。

 

MYSQL/HIVESQL笔试题:HIVESQL(一)分组求TopN/行转列/列转行

标签:使用   排名   数学   为我   case when   技术   group   cdn   ges   

人气教程排行