sql语句 case的两种用法

select empno,ename,
       case job
          when 'PRESIDENT' THEN '总裁'
          when 'MANAGER'  THEN '经理'
          else '打杂的'
       end
from emp


select empno,ename,
       case when SAL>=4000 THEN '有钱'
               when SAL>2500 and SAL<4000 then '中等'
               else '贫困'
       end
from emp

 实例演示:

  (1)查询表users中的数据。

  select u.id,u.realname,U.SEX from users u;

  查询结果如下

  ID    REALNAME SEX
  1  10082 松XX
  2  10084 林XX     1
  3  10087 西XX
  4  10100 胡XX
  5  10102 龙XX     1
  ......

  (2)上表结果中的"sex"是用代码表示的,希望将代码用中文表示。可在语句中使用CASE语句。

select u.id,u.realname,U.SEX,
  ( case u.sex
  when 1 then '男'
  when 2 then '女'
  else '空的'
  END
  ) 性别
from users u;

 

 

select u.id,u.realname,U.SEX,
  ( case u.sex
  when 1 then '男'
  when 2 then '女'
  else '空的'
  END
  ) 性别
from users u;

 

  查询结果

  ID    REALNAME SEX  性别
  1 10082 松XX         空的
  2 10084 林XX     1   男
  3 10087 西XX         空的
  4 10100 胡XX         空的
  5 10102 龙XX     1   男
  ......

  如果不希望列表中出现"sex"列,语句如下

select u.id,u.realname,
( case u.sex
when 1 then '男'
when 2 then '女'
else '空的'
END
) 性别
from users u;

 

 

select u.id,u.realname,
( case u.sex
when 1 then '男'
when 2 then '女'
else '空的'
END
) 性别
from users u;

 

  (3)将sum与case结合使用,可以实现分段统计。

  例如现在我希望将上表中各种性别的人数进行统计,sql语句如下

select
sum( case u.sex when 1 then 1 else 0 end) 男性,
sum( case u.sex when 2 then 1 else 0 end) 女性,
sum( case when u.sex<>1 and u.sex<>2  then 1 else 0 end) 性别为空
from users u;

 

 

select
sum( case u.sex when 1 then 1 else 0 end) 男性,
sum( case u.sex when 2 then 1 else 0 end) 女性,
sum( case when u.sex<>1 and u.sex<>2  then 1 else 0 end) 性别为空
from users u;

 

  执行结果如下

  男性  女性  性别为空
  1 41    15   0

  如果学校内有数千名学生进行了考试,想统计60分以下、60-80分、80-100分的总人数,就可以使用这样的语句来实现。只是条件不同而已。

  (4)如果sum、case when结合group by使用,可以进行分组分段统计。

  如,我希望统计users表中每个创建者创建的男性、女性、无性别的用户总数(数据表中有一个字段creator_id,表示创建者的ID),语句如下

select u.creator_id 创建者ID,
sum( case u.sex when 1 then 1 else 0 end) 男性,
sum( case u.sex when 2 then 1 else 0 end) 女性,
sum( case when u.sex<>1 and u.sex<>2  then 1 else 0 end) 性别为空
from users u
group by u.creator_id;

 

 

select u.creator_id 创建者ID,
sum( case u.sex when 1 then 1 else 0 end) 男性,
sum( case u.sex when 2 then 1 else 0 end) 女性,
sum( case when u.sex<>1 and u.sex<>2  then 1 else 0 end) 性别为空
from users u
group by u.creator_id;

 

  查询结果如下

  创建者ID 男性 女性 性别为空
  1          0    0   0
  2 10000    35   12  0
  3 11100    0    0   0
  4 11060    0    0   0
  5 11040    0    0   0
  6 11080    2    0   0
  7 10281    3    3   0
  8 10580    1    0   0

  上例中只有一个分组字段,实现了1级统计;如果有多个分组字段,应该可以实现多级统计了。如有居民统计表,保存了人口信息、人口所在市、区、街道信息等,欲统计深圳市的人口数据,实现统计如下统计结果的话,就可以通过多级分组实现。

  区划    男性居民     女性居民
  深圳市            
  南山区           
  粤海           
  科技           
  宝安区           
  新安           

  (5)case when的语法

CASE
WHEN <A> THEN <somethingA>
WHEN <B> THEN <somethingB>
ELSE <somethingE>
END
 

 

 

CASE
WHEN <A> THEN <somethingA>
WHEN <B> THEN <somethingB>
ELSE <somethingE>
END

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL中,CASE语句用于根据条件执行不同的操作。CASE语句有两种形式:简单CASE和搜索CASE。下面我将分别介绍两种形式的使用方法。 1. 简单CASE语句 简单CASE语句是在一个字段或表达式上进行比较,根据匹配的条件返回特定的值。其语法如下: ``` CASE expression WHEN value1 THEN result1 WHEN value2 THEN result2 ... ELSE result END ``` 其中,expression是要进行比较的字段或表达式,value1、value2等是要匹配的值,result1、result2等是匹配成功后返回的结果,ELSE子句用于处理无法匹配的情况。 例如,假设有一个学生表,其中有一个字段是score,根据score的值返回不同的等级,可以使用以下SQL语句: ``` SELECT name, score, CASE WHEN score >= 90 THEN 'A' WHEN score >= 80 THEN 'B' WHEN score >= 70 THEN 'C' WHEN score >= 60 THEN 'D' ELSE 'E' END AS grade FROM student; ``` 2. 搜索CASE语句 搜索CASE语句是在多个表达式上进行比较,根据匹配的条件返回特定的值。其语法如下: ``` CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... ELSE result END ``` 其中,condition1、condition2等是要匹配的条件,result1、result2等是匹配成功后返回的结果,ELSE子句用于处理无法匹配的情况。 例如,假设有一个订单表,其中有一个字段是amount,根据amount的值返回不同的折扣率,可以使用以下SQL语句: ``` SELECT order_id, amount, CASE WHEN amount > 5000 THEN 0.1 WHEN amount > 3000 THEN 0.05 WHEN amount > 1000 THEN 0.03 ELSE 0 END AS discount FROM orders; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值