sql之再遇case when

sql之再遇case when,第1张

sql之再遇case when

本人大三,没有一点思绪。所以写一篇博客

  先说最近的安排,如果每天我只弄这一点点的sql来说,我感觉工作量是不够的,甚至太少了,根本不够博主就业。所以博主准备厚积薄发,先将自己的计划学习一大截,然后每天晚上七点之后就开始每天的耕耘,因为博主有将近半天的时间在考驾照。所以应该不会学啥写啥了,会将重要的只是写在博客里面,同时我也会每天在博客上面写上一道sql题目。这些sql题目可能是来自其它博客的,也可能是来自其它公众号的。关于对hive的csdn博主,我经常看云祁,石榴姐yyds,涤生手记。希望以后也可以有我、
题目一:

需求:转换成为下面的样式:

  CourseMaster表:课程id,课程名称
  OpenCourse表:月份,课程id
  ·每个课程在6,7,8月份,只要有课就打成O,没有则打成X
解析:

select course_name,
case when course_id in 
(select course_id from
 OpenCourse where month =200706) then "O" else "X" End as "六月上课",
 case when course_id in 
 (select course_id from OpenCourse where month = 200707 ) then "O" else "X" end as "七月上课",
case when course_id in 
(select course_id from OpenCourse where month = 200708) then "O" else "X" end as "八月上课"
from CourseMaster 

  结果展示:

题目二:
  从下面的表中找出每个num的最大列

结果:

  解法1:将x,y,z合并到一列里面,这样分组找最大值,那个最大值就是在x,y,z里面找

select num,max(x) from 
(
select num,x from Greatests
union 
select num,y from Greatests
union 
select num,z from Greatests) TMP
group by num

  解法2:利用case when来进行比较。类似于三元运算符

select num,case when case when x  

  上面两种方法都是经过博主自己试验过的,完全可以在mysql中跑通。但是注意一点,就是在hive里面,group by 之后,select字段除了group by 的字段之外,不能存在其它字段,可以存在聚合函数。如果存在其它字段,那么就会报错i group by报错。但是在mysql里面就不会报错。至于为什么会报错,博主明天会写一篇文章给大家讲解一下。
题目三:order by case when
需求:

要求输出成下面这个样子:

解析:
  按照下面要求的展示出来,可以在order by后面加上case when 。给不同的Num赋予它不同的数值,这样order by 这些数值就可以变幻出下面的样子

select num ,x,y,z from Greatests
order by case  num
when "A" then 2
when "b" then 1
when "c" then 3
when "d" then 4
when  "5" then 6 
end  desc 

总结:
  明天就不会这样一个一个来了。之后的博客也会介绍一下关于hive的优化以及Hive的一些重点知识。例如自定义UDF函数,行转列,列转行。控制map和reduce数量。介绍hive的执行原理以及相关的组件,还有hive的文件存储之类的核心知识点。一边是sql一边是hive。齐头并进
最后,欢迎大家观看我的博客。虽然很简陋,但是这也是将来大数据新星的雏形。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5688715.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存