1
2

SQLのCASE式を集約関数の中に使う

Posted at

背景

case文で初心者からするととっつきづらい。。
ただ、SQLを使う上では避けては通れない道とのこと。

背景

条件分岐をselect文で素直に書くのは理解しやすかった。
しかし、sumなどの集約関数内で書くのは少しイメージがしづらい。

本文

問題

下記のようなデータ(1:男性、2:女性)を、

都道府県 性別 人口
東京 1 100
東京 2 30
神奈川 1 40
神奈川 2 80

下記のようなデータにしたい。

都道府県 男性 女性
東京 100 30
神奈川 40 80

手順

  1. まず、都道府県別になっているため、group_by 都道府県をする。
  2. 都道府県別にして、SUM(人口)するだけでは、男女混ざった人口が取得されてしまう。
    そのため、sum(男性の人口) as 男性sum(女性の人口)as 女性とすることで、
    男女別に人口の合計を求める。
  3. 男性の人口、女性の人口を求める部分を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式を入れられるか、考えること。

1
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2