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"是用代码表示的,希望将代码用中文表示。

 

实例演示:

  (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

 

目录
相关文章
|
Oracle 关系型数据库 数据库
Oracle中merge Into的用法
Oracle中merge Into的用法
|
负载均衡 Oracle 关系型数据库
Linux启动多个Oracle实例
Linux启动多个Oracle实例
146 0
|
6月前
|
SQL Oracle 关系型数据库
【YashanDB知识库】共享利用Python脚本解决Oracle的SQL脚本@@用法
【YashanDB知识库】共享利用Python脚本解决Oracle的SQL脚本@@用法
|
6月前
|
SQL Oracle 关系型数据库
【YashanDB知识库】共享利用Python脚本解决Oracle的SQL脚本@@用法
本文来自YashanDB官网,介绍如何处理Oracle客户端sql*plus中使用@@调用同级目录SQL脚本的场景。崖山数据库23.2.x.100已支持@@用法,但旧版本可通过Python脚本批量重写SQL文件,将@@替换为绝对路径。文章通过Oracle示例展示了具体用法,并提供Python脚本实现自动化处理,最后调整批处理脚本以适配YashanDB运行环境。
|
SQL 存储 Oracle
一篇文章带你学会 Oracle 存储过程的基本介绍和高阶用法(上)
一篇文章带你学会 Oracle 存储过程的基本介绍和高阶用法
|
11月前
|
SQL 存储 Oracle
Oracle用法
【10月更文挑战第15天】Oracle用法
140 5
|
Oracle 关系型数据库 Java
Oracle数据库导入工具IMP详解与用法
Oracle数据库导入工具IMP详解与用法
|
Oracle 关系型数据库
Oracle中decode 以及ROW_NUMBER() OVER() 函数等其它相关函数用法
Oracle中decode 以及ROW_NUMBER() OVER() 函数等其它相关函数用法
305 0
|
Oracle 关系型数据库 Java
Oracle数据库导入工具IMP详解与用法
Oracle数据库导入工具IMP详解与用法
|
SQL 存储 Oracle
一篇文章带你学会 Oracle 存储过程的基本介绍和高阶用法(下)
一篇文章带你学会 Oracle 存储过程的基本介绍和高阶用法