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

数据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 ;

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

时间: 2024-11-09 00:54:22

mysql 中 case when then .... else end 的简单使用的相关文章

mysql中case when 用于分类求和

假设有张学生成绩表(CJ)如下 [姓名] [学科] [成绩] 张三 语文 80 张三 数学 90 张三 物理 85 李四 语文 85 李四 数学 92 李四 物理 82 王五 数学 60 想变成 [姓名] [语文] [数学] [物理] 张三 80 90 85 李四 85 92 82 王五 null 60 null select 姓名,sum(case 学科 when '语文' then 成绩 end) as 语文,sum(case 学科 when '数学' then 成绩 end) as 数学,

MySQL中CASE的使用

语法说明: 方式一: CASE value WHEN [compare_value] THEN result [WHEN [compare_value] THEN result ...] [ELSE result] END 方式二: CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END 使用演示样例: mysql> select id,name, (gender) as '性别

mysql中 case when的使用

SELECT a.hsid, a.house_code, a.sale_date, a.pjid, COUNT( sdid ) AS num, b.hsid, b.pscid, b.hscode, b.hsarea1, b.hsrealarea1, b.hsusage, b.hsprice, b.hsstatus,sum(CASE WHEN b.hsrealarea1 >0THEN b.hsrealarea1ELSE b.hsarea1END)  as c , c.xzarea, c.lpmc,

MySql 中 case when then else end 的用法

便于理解,直接上例子: SELECT                case                   -------------如果    when sex='1' then '男' -------------sex='1',则返回值'男'    when sex='2' then '女' -------------sex='2',则返回值'女'      else 0                 -------------其他的返回'其他'    end            

mysql中case使用

前言:遇到这样一个需求,有一门成绩,成绩中只记录了学生的分数,现在需要统计学生的分数等级,100-90分为优秀,90-60分为及格,60-0分为不及格.这个需求就可以用CASE语句来表达. case语句分为简单case语句和可搜索case语句. 1.简单case的语法为 CASE case_expression WHEN when_expression_1 THEN commands WHEN when_expression_2 THEN commands ... ELSE commands E

MySQL中case then用法

1.查询图书价格,若价格为null,则显示unknown,若价格为10到20, 则显示10 to 20 SELECT price, CASE WHEN price='null' THEN 'UnKnow' WHEN price>10 and price<20 then '10 to 20' END FROM book; 2. select name, case when birthday<'1981' then 'old' when birthday>'1988' then 'yo

mysql中case用法

如上所述,使用case的子句将作为一个字段,方便起见,可以用别名表示.其中,when是case的条件,值为then的表达式值. 参考: http://www.owe-love.com/myspace/?action=show&id=188

mysql中case的一个例子

最近遇到一个问题: year amount num 1991 1 1.1 1991 2 1.2 1991 3 1.3 1992 1 2.1 1992 2 2.2 1992 3 3.3 把上面表格的数据查询成: year m1 m2 m3 1991 1.1 1.2 1.3 1992 2.1 2.2 2.3 看到这样的需求,首先想到的是用case去统计以及 用group by来分组 第一版sql代码: SELECT `year`, (CASE WHEN amount = 1 THEN num END

云计算学习路线图素材、课件,msyql中CASE WHEN语法

在本篇文章中将给大家讲解下msyql中CASE WHEN语法: MySQL中case when语句,用于计算条件列表并返回多个可能表达式之一. CASE具有两种格式:简单CASE函数将某个表达式与一组简单表达式进行比较以确定结果.CASE搜索函数计算一组布尔表达式以确定结果.两种都支持可选的ELSE函数. 1)简单CASE函数语法如下: CASE input_expression WHEN when_expression THEN result_expression [...n ] [ ELSE