欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Oracle中CASEWHEN的用法实例

程序员文章站 2022-12-10 19:34:33
实例演示:   (1)查询表users中的数据。   select u.id,u.realname,U.SEX from users u;   查询结果如下   ID RE...

实例演示:

  (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 *X
  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 *X 空的
  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 THEN
WHEN THEN
ELSE
END