SELECT句でCASE

以下の表からCASE句を使って部署毎、性別毎に30歳未満、30歳以上の

社員数を集計する。

 

社員ID 部署 性別 年齢
1 Creater male 32
2 Creater male 30
3 Creater female 23
4 Valuer male 45
5 Valuer male 50
6 Apointer female 40
7 Apointer female 42
8 Apointer male 52
9 Apointer male 34
10 Apointer female 41
11 Getter male 29
12 Getter female 36

 

SELECT
dept,COUNT(*) AS '合計',
SUM(CASE WHEN age < 30 THEN 1 ELSE 0 END) AS '合計(30未満)',
SUM(CASE WHEN sex ='male' AND age < 30 THEN 1 ELSE 0 END) AS '男性(30未満)',
SUM(CASE WHEN sex ='female' AND age < 30 THEN 1 ELSE 0 END) AS '女性(30未満)',
SUM(CASE WHEN age >= 30 THEN 1 ELSE 0 END) AS '合計(30以上)',
SUM(CASE WHEN sex ='male' AND age >30 THEN 1 ELSE 0 END) AS '男性(30以上)',
SUM(CASE WHEN sex ='female' AND age >30 THEN 1 ELSE 0 END) AS '女性(30以上)'
FROM test
GROUP BY dept

■実行結果

 

dept 合計 合計(30未満) 男性(30未満) 女性(30未満) 合計(30以上) 男性(30以上) 女性(30以上)
Apointer 5 0 0 0 5 2 3
Creater 3 1 0 1 2 2 0
Getter 2 1 1 0 1 0 1
Valuer 2 0 0 0 2 2 0