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实现 LeetCode 50 Pow(x,n)
    Java实现 LeetCode 50 Pow(x,n)
    Java实现 LeetCode 49 字母异位词分组
    Java实现 LeetCode 49 字母异位词分组
    Java实现 LeetCode 49 字母异位词分组
    Java实现 LeetCode 48 旋转图像
    Java实现 LeetCode 48 旋转图像
    Java实现 LeetCode 48 旋转图像
    Java实现 LeetCode 47 全排列 II(二)
    Java实现 LeetCode 47 全排列 II(二)
  • 原文地址:https://www.cnblogs.com/lidabo/p/3088142.html
Copyright © 2011-2022 走看看