最近,在学习Hive基础知识时,遇到了遇到了Case When Else End语法,以前学习MySQL时忽略了这部分知识点,现总结一下相关的知识给大家。首先练习一个例子如下:

一、学生课程成绩统计

1)建表

use hiveDemo;
CREATE TABLE `course` (
`id` int,
`sid` int ,
`course` string,
`score` int
) ;
2)插入数据

// 字段解释:id, 学号, 课程, 成绩
INSERT INTO `course` VALUES (1, 1, ‘yuwen’, 43);
INSERT INTO `course` VALUES (2, 1, ‘shuxue’, 55);
INSERT INTO `course` VALUES (3, 2, ‘yuwen’, 77);
INSERT INTO `course` VALUES (4, 2, ‘shuxue’, 88);
INSERT INTO `course` VALUES (5, 3, ‘yuwen’, 98);
INSERT INTO `course` VALUES (6, 3, ‘shuxue’, 65);

3)需求

求:所有数学课程成绩 大于 语文课程成绩的学生的学号

最开始的想法是打算同过自连接的方式来解决,后来咨询了公司的同事,知道了可以case可以用来解决此问题。

a.使用case…when…将不同的课程名称转换成不同的列。

create view tmp_course_view as
select sid, case course when “shuxue” then score else 0 end as shuxue,
case course when “yuwen” then score else 0 end as yuwen from course;

select * from tmp_course_view;

b.以sid分组合并取各成绩最大值

create view tmp_course_view1 as
select aa.sid, max(aa.shuxue) as shuxue, max(aa.yuwen) as yuwen from tmp_course_view aa group by sid;

select * from tmp_course_view1;
c.比较结果

select * from tmp_course_view1 where shuxue > yuwen;

二、Case When Else End用法详解

1)更新

update table
set 字段1=case
when 条件1 then 值1
when 条件2 then 值2
else 值3
end
where ……
2)查询

select 字段1, 字段2,
case 字段3
when 值1 then 新值
when 值2 then 新值
end as 重新命名字段3的名字
from table
where ……
order by ……
在一般的SELECT中,其语法如下:

sql 中 case when 语法在这里添加日志标题 – 钱途无梁 – Notebook of 钱途无梁SELECT <myColumnSpec> =
sql 中 case when 语法在这里添加日志标题 – 钱途无梁 – Notebook of 钱途无梁CASE
sql 中 case when 语法在这里添加日志标题 – 钱途无梁 – Notebook of 钱途无梁WHEN <A> THEN <somethingA>
sql 中 case when 语法在这里添加日志标题 – 钱途无梁 – Notebook of 钱途无梁WHEN <B> THEN <somethingB>
sql 中 case when 语法在这里添加日志标题 – 钱途无梁 – Notebook of 钱途无梁ELSE <somethingE>
sql 中 case when 语法在这里添加日志标题 – 钱途无梁 – Notebook of 钱途无梁END
CASE可能是 SQL 中被误用最多的关键字之一。虽然你可能以前用过这个关键字来创建字段,但是它还具有更多用法。例如,你可以在 WHERE、GROUP BY和Order By子句中使用CASE。

————————————————
版权声明:本文为CSDN博主「追梦菜鸟」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u013514928/article/details/80969949

原文地址:http://www.cnblogs.com/duanweishi/p/16827997.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性