赞
踩
最近,在学习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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。