0
0

SQL CASE文でテーブルの内容を分類する

Posted at

背景

実務だと、「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つのパートで考えるとわかりやすかった。

  1. 各レコードを、どの部分集合に当てはめるか
    =>  Bate と Ch は「老人」の部分集合

  2. その集合に対してどのような処理(今回であればcount)をしたいか 
    =>  Bate と Ch の「数を数えたい」

  • 集約関数とgroup by の実行計画は、ワーキングメモリ以外は特に注意しなくてOKとのこと

(その他)

  • BETWEENは両端の値を含む
  • 条件色の「かつ」はAND

次のステップ

case文をたくさん使って慣れたい!

0
0
0

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
0
0