天天看点

报表统计中group by 和case when 用法小结(统计某一字段不同值出现的频次)A、case when先从最简单的case when讲起B group by 的用法group by 和 case when结合使用

A、case when先从最简单的case when讲起

1、先从最简单的case when讲起

报表统计中group by 和case when 用法小结(统计某一字段不同值出现的频次)A、case when先从最简单的case when讲起B group by 的用法group by 和 case when结合使用
报表统计中group by 和case when 用法小结(统计某一字段不同值出现的频次)A、case when先从最简单的case when讲起B group by 的用法group by 和 case when结合使用

2、有多个字段需要判断的case when

报表统计中group by 和case when 用法小结(统计某一字段不同值出现的频次)A、case when先从最简单的case when讲起B group by 的用法group by 和 case when结合使用

B group by 的用法

1、单个字段的group by

我们可以看到,字段dev_bank,后面有一个聚合函数,group by 后面接的是该字段,除去聚合函数字段

*重要事项

select 所面接的所有的字段,必须出现在group by 后面,可以比group by 后面的少,但时不能多,是group by后面字段的子集

报表统计中group by 和case when 用法小结(统计某一字段不同值出现的频次)A、case when先从最简单的case when讲起B group by 的用法group by 和 case when结合使用

2、group by后面接多个字段

报表统计中group by 和case when 用法小结(统计某一字段不同值出现的频次)A、case when先从最简单的case when讲起B group by 的用法group by 和 case when结合使用

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 
           

错误用法

报表统计中group by 和case when 用法小结(统计某一字段不同值出现的频次)A、case when先从最简单的case when讲起B group by 的用法group by 和 case when结合使用

dev_class在select后面但是不在group by 后面,所以报错不是group by 表达式

group by 和 case when结合使用

需要对某一个字段进行分类统计,统计该字段每种值出现的数量,后这该字段位数字时候,计算每种值得和,就需要使用group by和case when结合使用

  1. 例子中可以看出,我们需要对dev_class等于13,等于11和不是这两个值得数量进行统计分组
报表统计中group by 和case when 用法小结(统计某一字段不同值出现的频次)A、case when先从最简单的case when讲起B group by 的用法group by 和 case when结合使用
  1. 下面列子是对表联立查询之后的结果进行两个字段值得分组统计
    报表统计中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字段后面出现