SQL每日一题

最近突然变得好轻松了,也要开始努力更新博文了

小谈:

现在博主的时间多了起来,因为驾考之旅差不多已经接近末尾了。就差一个科目四了,但是由于疫情,科目四暂时停了。

在没有更新博客的这几天里面,博主每天都在练车考驾照,花费了十天多的时间,将科目二和科目三一把过。除了给驾校交了3200元的学费。还在考场练车花了有550元。其中,科目二模拟一次花了150,科目三模拟了两次,花了400.不过好在结果非常好,都过了,现在我只差科目四就结束我的驾考之旅了。

现在我有大把的时间来学习和更新博客了,因此我会开一个专题,叫做sql每日一题。对我们的sql技巧进行训练,以及更新相关的数仓组件。如sqoop和flume。争取在2月份之前,将这些搞完,然后花费10天时间进行讲解离线数仓。

每日一题:

有这样一个数据

 

将这些数据进行行转列,转换成下面的数据

 

分析:

源表数据中,有三列。year,department,score

目标表中也有三列数据,year,部门a的成绩,部门b的成绩

如果是A部门的成绩,A部门的成绩转换成列。如果是部门B的成绩,将b部门的成绩转换成列。

year,a的成绩,b的成绩

根据年龄分组,求出a,b部门各个分数

select year,
 max(case when department = "A" then score end) col_a,
 max(case when department = "B" then score end) col_b 
from t1 group by year

 

可能会有疑惑,为什么要给case when加上max.

博主用的hql语句,hive明确语法规定,如果有group by,那么查询语句中,不能出现除分组字段外的字段,但是可以有聚合函数。

我们不加max就会报错,当然也可以将max换成min.因为在本次数据中,都是每年只有一个数据

问题二:将上面表中的结果,转换为原来的数据。

 

转成成

 

分析:

源表:将每年a和b部门的成绩汇总

目标表:将汇总的数据分散开。

  1. 先将A部门的数据分散开,即

 

2.将B部门的数据分散开

select year,"B" as department,col_b a score from t1_2

3.将1和2的数据进行合并

所以,总的sql就是

 

 

总结:

可能这一篇博客,不是特别的好,因为这是停了五天后的第一篇博文,接下来,在遇到这样描述不清的题目,博主会手写一下,让大家看个明白。

下午会更新hive中explain的总结,应该会有千字,之后会每一天更新博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值