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后面字段的子集
2、group by后面接多个字段
group by 会默认有限使用dev_bank进行分许,然后将dev_bank相同,dev_model不同的在进行分组统计
SELECT dev_bank,dev_model,COUNT(dev_model) count FROM dev_bmsg db
GROUP BY dev_bank,dev_model
错误用法
dev_class在select后面但是不在group by 后面,所以报错不是group by 表达式
group by 和 case when结合使用
需要对某一个字段进行分类统计,统计该字段每种值出现的数量,后这该字段位数字时候,计算每种值得和,就需要使用group by和case when结合使用
- 例子中可以看出,我们需要对dev_class等于13,等于11和不是这两个值得数量进行统计分组
- 下面列子是对表联立查询之后的结果进行两个字段值得分组统计
报表统计中group by 和case when 用法小结(统计某一字段不同值出现的频次)A、case when先从最简单的case when讲起B group by 的用法group by 和 case when结合使用
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,
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 on db.geography_area=gt.areaid
left join inst_pla_type ipt on db.install_type=ipt.typeid
)
group by dev_bank,areaname order by dev_bank,areaname
问题:
在select后面我们可以看到一个bank_name字段但是没有在group by后面出现,是因为bank_name是dev_bank的别名,和dev_bank是一样的字段,所以可以不在group by字段后面出现