码迷,mamicode.com
首页 > 数据库 > 详细

mysql 中 case when then .... else end 的简单使用

时间:2018-08-18 00:56:03      阅读:1251      评论:0      收藏:0      [点我收藏+]

标签:http   学生   span   mysq   mysql   bubuko   学校   color   name   

数据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, tscor
from 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 ;

技术分享图片

 

mysql 中 case when then .... else end 的简单使用

标签:http   学生   span   mysq   mysql   bubuko   学校   color   name   

原文地址:https://www.cnblogs.com/vincentbnu/p/9495609.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!