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字段後面出現