MySQL中Case When用法详解

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

一、学生课程成绩统计

1)建表


  
  
  1. use hiveDemo;
  2. CREATE TABLE `course` (
  3. `id` int,
  4. `sid` int ,
  5. `course` string,
  6. `score` int
  7. ) ;

 2)插入数据


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

3)需求

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

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

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


  
  
  1. create view tmp_course_view as
  2. select sid, case course when "shuxue" then score else 0 end as shuxue,
  3. case course when "yuwen" then score else 0 end as yuwen from course;
  4. select * from tmp_course_view;
 

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


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

  c.比较结果

select * from tmp_course_view1 where shuxue > yuwen;
  
  

二、Case When Else End用法详解

 1)更新


  
  
  1. update table
  2. set 字段 1= case
  3. when 条件 1 then1
  4. when 条件 2 then2
  5. else3
  6. end
  7. where ……

2)查询


  
  
  1. select 字段 1, 字段 2,
  2. case 字段 3
  3. when1 then 新值
  4. when2 then 新值
  5. end as 重新命名字段 3的名字
  6. from table
  7. where ……
  8. order by ……

在一般的SELECT中,其语法如下:   


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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值