zoukankan      html  css  js  c++  java
  • Oracle中CASE WHEN的用法实例

    实例演示:

      (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;

      查询结果


      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;

      (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;

      执行结果如下


      男性  女性  性别为空
      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;

      查询结果如下


      创建者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

  • 相关阅读:
    Java自动化测试-02.编写第一个Java程序
    Java自动化测试-01.环境准备(JDK/环境变量/Intellij IDEA安装)
    eNSP 40报错(Virtualbox 0x80070005)现象与解决
    DDD初步认知
    微服务后业务系统围绕CAP的业务方案设计思考
    关于热点key读的一点思考
    Java并发——一些提高性能的方式
    Java并发——Synchronized
    dubbo学习(六)服务发布&引用
    dubbo学习(五)路由
  • 原文地址:https://www.cnblogs.com/chenjianhong/p/4144505.html
Copyright © 2011-2022 走看看