最近突然变得好轻松了,也要开始努力更新博文了
小谈:
现在博主的时间多了起来,因为驾考之旅差不多已经接近末尾了。就差一个科目四了,但是由于疫情,科目四暂时停了。
在没有更新博客的这几天里面,博主每天都在练车考驾照,花费了十天多的时间,将科目二和科目三一把过。除了给驾校交了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部门的成绩汇总
目标表:将汇总的数据分散开。
- 先将A部门的数据分散开,即
2.将B部门的数据分散开
select year,"B" as department,col_b a score from t1_2
3.将1和2的数据进行合并
所以,总的sql就是
总结:
可能这一篇博客,不是特别的好,因为这是停了五天后的第一篇博文,接下来,在遇到这样描述不清的题目,博主会手写一下,让大家看个明白。
下午会更新hive中explain的总结,应该会有千字,之后会每一天更新博客。