博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql 中 case when then .... else end 的简单使用
阅读量:5363 次
发布时间:2019-06-15

本文共 2255 字,大约阅读时间需要 7 分钟。

数据SQL CASE 表达式是一种通用的条件表达式,类似于其它语言中的 if/else 语句。 

CASE WHEN condition THEN result 

   WHEN condition THEN result 

   .............

   [WHEN ...] 
   [ELSE result] 
END 

CASE 子句可以用于任何表达式可以有效存在的地方。 condition 是一个返回boolean 的表达式。 如果结果为真,那么 CASE 表达式的结果就是符合条件的 result。 如果结果为假,那么以相同方式搜寻任何随后的 WHEN 子句。 如果没有 WHEN condition 为真,那么 case 表达式的结果就是在 ELSE 子句里的值。 如果省略了 ELSE 子句而且没有匹配的条件, 结果为 NULL。

或其语法为:

简单Case函数 

CASE sex 
         WHEN '1' THEN '男' 
         WHEN '2' THEN '女' 
ELSE '其他' END 

建议都使用第一种,少记点,也好理解。

例子:如下某学校在2005和2006年比赛的数据,

 

1)将 win_loss 中的胜,负,平 都变成 对应的 ‘win’,'loss','tie'

select date_year,    case     when win_loss='胜' then 'win'    when win_loss='负' then 'loss'     else 'tie'     end win_loss    from scores;

2) 假设胜得3分,平得一分,负得0分,统计每一年的得分

select date_year ,sum(case when win_loss='胜' then 3 when win_loss='平' then 1 else 0 end ) score from scores group by date_year;

3)统计每一年的 胜场数,平场数 和 负场数

select date_year ,sum(case when win_loss='胜' then 1 else 0 end ) '胜场数' ,sum(case when win_loss='负' then 1 else 0 end) '负场数',sum(case when win_loss='平' then 1 else 0 end) '平场数' from scores group by date_year;

由例一可以发现,使用 case when  then  else then 时 是每一条语句都去执行一遍。

例二:数据集如下:

 

试试看:

select tname, case when ttype = '语文' then tscor else 0 end from testScore

1)用一行来显示一个学生的成绩

select tname, tscorfrom testScore group by tname;

select tname, (case when ttype='语文' then tscor else 0 end) '语文', (case when ttype ='数学' then tscor else 0 end) '数学', (case when ttype ='英语' then tscor else 0 end) '英语'from testScore group by tname;

select    tname as '姓名' ,         max(case ttype when '语文' then tscor else 0 end) '语文',         max(case ttype when '数学' then tscor else 0 end) '数学',         max(case ttype when '英语' then tscor else 0 end) '英语'     from testScore     group by tname;
select tname, max(case  when ttype='语文' then tscor else 0 end) '语文', max(case when ttype ='数学' then tscor else 0 end) '数学', max(case when ttype ='英语' then tscor else 0 end) '英语'from testScore group by tname;

这两是是同样的结果。

对比上面,聚和函数的作用。。。。??

 2)统计学生文科,理科的总分。

select tname as '姓名',       case        when ttype='数学' then '理科' else '文科' end as '科别',        sum(tscor) as '总分'    from testScore    group by tname,             case              when ttype='数学' then '理科' else '文科' end ;

 

转载于:https://www.cnblogs.com/vincentbnu/p/9495609.html

你可能感兴趣的文章
Linux常用命令(十一)
查看>>
Linux常用命令(十)
查看>>
实验吧之这就是一个坑
查看>>
Linux常用命令(十二)
查看>>
Linux常用命令(十三)
查看>>
Linux常用命令(十五)
查看>>
Linux常用命令(十四)
查看>>
Linux常用命令(十七)
查看>>
Linux常用命令(十六)
查看>>
Linux常用命令(二十四)
查看>>
4种java定时器
查看>>
Vue.js 教程
查看>>
linux 设置网卡
查看>>
hive 语法 case when 语法
查看>>
Ajax:js读取txt内容(json格式内容)
查看>>
Task 7 买书最低价格问题
查看>>
Selenium3+python自动化007-警告框
查看>>
html5 相同形状的图形进行循环
查看>>
springboot中文官方文档
查看>>
ThreadLocal实现线程范围内共享
查看>>