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小时内删除。
发表评论