背景
実務だと、「DBをさまざまな角度から検討したい」って時、ありますよね。
(年齢別、地域別、性別、など。)
そんな時にcase文を使用することで実現できるとのこと。
目的
さまざまな切り口でデータを分析するときに、
case文を使用して抽出するイメージができるようになること。
キーワード
- case、group by,
- 部分集合、集約関数
例題(※SQL実践入門から抜粋)
下記人物テーブル1から人物テーブル2を作成したい。
人物テーブル1
名前 | 年齢 |
---|---|
An | 30 |
Ad | 21 |
Bate | 87 |
Be | 54 |
Bill | 39 |
Ch | 90 |
Da | 12 |
人物テーブル2
年齢区分 | 人数 |
---|---|
子供 | 1 |
成人 | 5 |
老人 | 2 |
子供は Da の1人
老人は Bate、Ch の2人👬
回答
select
case when 年齢 < 20 then 子供
case when 年齢 between 20 AND 69 then 成人
case when 年齢 > 80 then 老人
else null END AS 年齢区分
, count(*) AS 人数
from 人物テーブル1
group by 年齢区分
学び
-
完成系のテーブル(今回ではテーブル2)を先に作ると、SQLを書く前のとっかかりとしてわかりやすい。
-
2つのパートで考えるとわかりやすかった。
-
各レコードを、どの部分集合に当てはめるか
=> Bate と Ch は「老人」の部分集合 -
その集合に対してどのような処理(今回であればcount)をしたいか
=> Bate と Ch の「数を数えたい」
- 集約関数とgroup by の実行計画は、ワーキングメモリ以外は特に注意しなくてOKとのこと
(その他)
- BETWEENは両端の値を含む
- 条件色の「かつ」はAND
次のステップ
case文をたくさん使って慣れたい!