https://blog.csdn.net/changxiangyangy/article/details/86718551

前几天,为了给产品分析当前用户数据结构,写sql的时候使用到了case when,今天来总结一下case when 的使用方法,以此为戒,感觉写的不好请拍砖,感觉写的还可以,给哥们点个赞,或者回复一下,让我意识到我不是一个人在战斗,好了废话不多说了,进入正题。
关于case when的使用情况,我总结下来有三种,第一、等值转换,第二、范围转换,第三、列转行操作。
等值转换
咱们在设计数据库的时候总是会把用户的性别用int存储('0'为女,'1'为男),但是怎么把它转换成汉字显示呢?
原始表数据
 
SQL语句
select
name as '名字',
(case sex when 0 then '女' else '男' end) as '性别'
from test.student;
ps.最后的 'end' 别丢了,我刚开始使用的时候我就有这个毛病,并且一般的case when语句都会比较长,最好添加小括号包起来,这样更容易阅读。
查询结果
 
范围转换
有的时候,也会遇到这种情况,按照用户成绩显示优(90+)、良(80-90)、及格(60-80)、未及格(60-),这个跟第一个不同的是,他是一个分数的范围,要怎么转换成汉子显示呢?你可能觉得很简单,不就是吧when那换成条件吗?先打住咱们往下看
原始表数据
 
 
SQL语句
select
name as '姓名'
,(case score when score>=90 then '优' when score>=80 then '良' when score>=60 then '及格' else '不及格' end) as '等级'
from test.stu_score;
这样写对不?
这个查出来的结果是
 
 
 
这是为啥呢?想明白了吗?
因为 case when就像一个 switch case语句一样,如果你在case后填了东西,它会拿后它跟when 对比,咱们的 写的case 后写=了 score 而when后面写了score>=90 ,然而,'score' 等于 'score>=90'吗? 显然不等于,那该怎么写呢?
select
name as '姓名'
,(case score when score>=90 then '优' when score>=80 then '良' when score>=60 then '及格' else '不及格' end) as '等级'
from test.stu_score;
 
 
列转行操作
还是用学生的例子吧,现在有图1学生成绩数据, 现在要怎么按图2显示出来呢?
图1
 
图2
 
 
第一步 先按照科目分开, 符合条件的设置分数,不符合的给置零。
select name as '姓名'
,(case course when '语文' then score else 0 end) as '语文'
,(case course when '数学' then score else 0 end) as '数学'
,(case course when '英语' then score else 0 end) as '英语'
from test.course_score
 
 
然后再按照名字group by ,对分数求max。
select name as '姓名'
,max(case course when '语文' then score else 0 end) as '语文'
,max(case course when '数学' then score else 0 end) as '数学'
,max(case course when '英语' then score else 0 end) as '英语'
from test.course_score group by name;
 
 
————————————————
版权声明:本文为CSDN博主「慕容田雨」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/changxiangyangy/article/details/86718551

case when使用的总结的更多相关文章

  1. C#中,switch case语句中多个值匹配一个代码块的写法

    switch (num) { case 1: Response.Write("1"); break; case 2: case 3: Response.Write("2| ...

  2. Android Studio快捷键switch case 轻松转换为if else

    Android Studio快捷键switch case 轻松转换为if else 今天碰到的问题,没有找到资料,后面找到了方法,这个记下来,转载请注明出处:http://www.cnblogs.co ...

  3. 你真的会玩SQL吗?Case也疯狂

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

  4. java中的switch case

    switch-case语句格式如下 switch(变量){ case 变量值1: //; break; case 变量值2: //...; break; ... case default: //... ...

  5. sql case when...then...else...end 选择判断

    达到的需求为: 吓数收回日期为空:当接单日期不等于空和当天减接单日期大于3天时,为1,否则为0:当接单日期为空.最大发织交期不等于空和当天减去最大发织交期大于3天时,为1,否则为0:当接单日期和发织交 ...

  6. C# 中Switch case 返回不止用break

    Switch(temp) { case "A": //跳出循环 break; case "B": //返回值 return var; case "C& ...

  7. SQL --- Case when 的使用方法

    1. Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' E ...

  8. 2.3switch case 语句注意事项。

    #include<stdio.h> int main() { void action1(int, int),action2(int, int); char ch; , b=; ch = g ...

  9. sh4.case语句

    case ... esac 与其他语言中的 switch ... case 语句类似,是一种多分枝选择结构.case 语句匹配一个值或一个模式,如果匹配成功,执行相匹配的命令.case语句格式如下: ...

  10. 为什么说在使用多条件判断时switch case语句比if语句效率高?

    在学习JavaScript中的if控制语句和switch控制语句的时候,提到了使用多条件判断时switch case语句比if语句效率高,但是身为小白的我并没有在代码中看出有什么不同.去度娘找了半个小 ...

随机推荐

  1. RandomAccessFile类学习

    RandomAccessFile类学习 RandomAccessFile是io包的类,从Object直接继承而来,只可以对文件进行操作,可以对文件进行读取和写入. 当模式为r:当文件不存在时会报异常: ...

  2. oracle跟踪

    select sql_text --sql文本的前1000个字符 ,first_load_time --初次载入时间 ,last_load_time --最后载入时间 ,s.sql_fulltext ...

  3. 09-排序2 Insert or Merge(25 分)

    According to Wikipedia: Insertion sort iterates, consuming one input element each repetition, and gr ...

  4. [信息学奥赛一本通oj1741]电子速度 题解

    对于$100 \%$的数据,$1≤n,m≤1e6 \ \ \ 0<=x_i,y_i<20170927 \ \ \ 1≤l_i,r_i≤n $ $Solution:$ 一开始没看懂题.后来大 ...

  5. [NOIP模拟20]题解

    来自达哥的问候…… A.周 究级难题,完全不可做QAQ #include<cstdio> #include<iostream> #include<cstring> ...

  6. Spring中Bean的作用域和生命周期

    作用域的种类 Spring 容器在初始化一个 Bean 的实例时,同时会指定该实例的作用域.Spring3 为 Bean 定义了五种作用域,具体如下. 1)singleton 单例模式,使用 sing ...

  7. 学习React之前你需要知道的的JavaScript基础知识

    在我的研讨会期间,更多的材料是关于JavaScript而不是React.其中大部分归结为JavaScript ES6以及功能和语法,但也包括三元运算符,语言中的简写版本,此对象,JavaScript内 ...

  8. 【丛林】HTML Table 表格浅谈(边框、隔行变色

    此例子已经包含本文大部分内容,请对照参考.查看代码 > 定义和用法 table标签定义 HTML 表格. 创建表格的四要素:table.tr.th.td <table> 整个表格以& ...

  9. Yii2.0 for update 行级锁

    当我们遇到存在高并发并且对于数据的准确性有要求的场景,需要了解和使用for update 需要注意的点: 1.InnoDB默认是行级别的锁,当有明确指定的主键时候,是行级锁.否则是表级别 2.for ...

  10. 实验四 《Android程序设计》

    实验四 <Android程序设计实验报告>-20175131王泽龙 实验四 Android程序设计-1 ①实验要求: Android Stuidio的安装测试:参考<Java和And ...