Oracle分组分段统计-sum+casewhen+groupby使⽤实例 实例演⽰:
  (1)查询表users中的数据。
  select u.alname,U.SEX from users u;
  查询结果如下
  ID    REALNAME SEX
1  1008
2 松XX
  2  10084 林XX    1
  3  10087 西XX
  4  10100 胡XX
  5  10102 龙XX    1
  ......
  (2)上表结果中的"sex"是⽤代码表⽰的,希望将代码⽤中⽂表⽰。可在语句中使⽤CASE语句。
select u.alname,U.SEX,
( case u.sexgroupby分组
when 1 then '男'
when 2 then '⼥'
else '空的'
END
) 性别
from users u;
  查询结果
  ID    REALNAME SEX  性别
1 1008
2 松XX        空的
  2 10084 林XX    1  男
  3 10087 西XX        空的
  4 10100 胡XX        空的
  5 10102 龙XX    1  男
  ......
  如果不希望列表中出现"sex"列,语句如下
select u.alname,
( 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),语句如下
ator_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 ator_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

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。