目录
一、学生课程成绩统计1) 建表2) 插入数据3) 需求二、Case When Else End用法详解1) 更新2) 查询总结最近,在学习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>
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。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持易采站长站。










