报表统计中groupby 和casewhen ⽤法⼩结(统计某⼀字段不同值出现的频次)
A 、case when 先从最简单的case when 讲起1、先从最简单的case when讲起
2、有多个字段需要判断的case when
B group by 的⽤法
1、单个字段的group by
我们可以看到,字段dev_bank,后⾯有⼀个聚合函数,group by 后⾯接的是该字段,除去聚合函数字段
*重要事项 select 所⾯接的所有的字段,必须出现在group by 后⾯,可以⽐group by 后⾯的少,但时不能多,是group by后⾯字段的⼦集
select dev_bank ,count (dev_code) 数量 from dev_bmsg group by dev_bank
2、group by后⾯接多个字段
group by 会默认有限使⽤dev_bank进⾏分许,然后将dev_bank相同,dev_model不同的在进⾏分组统计
错误⽤法
dev_class在select后⾯但是不在group by 后⾯,所以报错不是group by 表达式
group by 和 case when 结合使⽤
需要对某⼀个字段进⾏分类统计,统计该字段每种值出现的数量,后这该字段位数字时候,计算每种值得和,就需要使⽤group by和case when结合使⽤
1. 例⼦中可以看出,我们需要对dev_class等于13,等于11和不是这两个值得数量进⾏统计分组
SELECT dev_bank,dev_model,COUNT (dev_model) count FROM dev_bmsg db
GROUP BY dev_bank,dev_model
1. 下⾯列⼦是对表联⽴查询之后的结果进⾏两个字段值得分组统计
select dev_bank,dev_bank bank_name,areaname,
count(case when dev_class='11'and is_in='A1'then'ATM⼤堂'end )AA ,
count(case when dev_class='11'and is_in='A2'then'ATM穿墙'end) BB ,
count(case when dev_class='13'and is_in='A1'then'存取款⼀体机⼤堂'end)CC ,
count(case when dev_class='13'and is_in='A2'then'存取款⼀体机穿墙'end)DD,
count(case when dev_class !='13'and dev_class !='11'and is_in='A1'then'⾃助终端⼤堂'end) EE,
groupby分组count(case when dev_class !='13'and dev_class !='11'and is_in='A2'then'⾃助终端穿墙'end) FF
from
(
select dev_bank,dev_bank bank_name,areaname,is_in,dev_class from dev_bmsg db
left join GEOGRAPHY_AREA gt aphy_area=gt.areaid
left join inst_pla_type ipt on db.install_peid
)
group by dev_bank,areaname order by dev_bank,areaname
问题1:
在select后⾯我们可以看到⼀个bank_name字段但是没有在group by后⾯出现,是因为bank_name是dev_bank的别名,和dev_bank是⼀样的字段,所以可以不
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论