背景
case文で初心者からするととっつきづらい。。
ただ、SQLを使う上では避けては通れない道とのこと。
背景
条件分岐をselect文で素直に書くのは理解しやすかった。
しかし、sumなどの集約関数内で書くのは少しイメージがしづらい。
本文
問題
下記のようなデータ(1:男性、2:女性)を、
都道府県 | 性別 | 人口 |
---|---|---|
東京 | 1 | 100 |
東京 | 2 | 30 |
神奈川 | 1 | 40 |
神奈川 | 2 | 80 |
下記のようなデータにしたい。
都道府県 | 男性 | 女性 |
---|---|---|
東京 | 100 | 30 |
神奈川 | 40 | 80 |
手順
- まず、都道府県別になっているため、group_by 都道府県をする。
- 都道府県別にして、SUM(人口)するだけでは、男女混ざった人口が取得されてしまう。
そのため、sum(男性の人口) as 男性
、sum(女性の人口)as 女性
とすることで、
男女別に人口の合計を求める。 - 男性の人口、女性の人口を求める部分をcase式で書く。
回答
select 都道府県,
sum(case when 性別=1 then 人口 else 0 end) as 男性
sum(case when 性別=2 then 人口 else 0 end) as 女性
from 人口
group by 都道府県
学び
select文の結果から、先にgroupbyを考え、sum内の式をどうするか?といった順序で考えると自分は理解しやすかった。
次のアクション
case whenがパッと出てくるようになるまでは時間が少しかかりそう。
条件分岐のたびにどうやったらcase式を入れられるか、考えること。