目次
本記事概要
対象者
- SQLでのデータ分析を勉強されている方
- 特に非エンジニアのマーケティング担当者やPMの方
- 【SQL練習】サンプルデータベースを用意するでMySQL公式のデータベースをローカルに作成されている方には特におすすめです。
目的
- サブクエリとは何か理解する。
- WITH句を使って可読性の高いサブクエリを作れるようになる!
筆者
- コインチェックという暗号資産の会社でマーケティング部の部長をしてます(https://twitter.com/sampling2x)
そもそも「サブクエリ」とは?
完結に説明すると、クエリの中にクエリを作ることです。
クエリの中にクエリを作ることで、より複雑なデータを取得することができます。
言葉だけではイメージが湧かないと思うので、以下が具体例になります。
使用テーブルはpaymentテーブルとcustomerテーブルです。
ではこの2つのテーブルを使って、「決済額の合計金額がTOP5のお客様のメールアドレスを取得したい」場合、どのように書けばよいのでしょうか。
WITH句を使わず、サブクエリを使って書くと以下のように書けると思います。
■JOINするテーブルをサブクエリを使って、合計決済額TOP5のみのテーブルにする(top_five_amount)

はい、わかりづらいです。
JOINの中にサブクエリを使って条件を付け加えています。

次章では、WITH句を使えば、どのようにサブクエリが書けるか見ていきます。
可読性がめちゃくちゃ上がるので、見てください!
【SQL】サブクエリはWTIH句が最強
ではここからWTIH句について解説していきます。
WITH句を使えば「クエリ内に新たにテーブルを作る」ことができます。
サブクエリ自体もクエリの中にクエリを書くので、似ているのですが、
WITH句で書くとそのテーブル内で何度でも使い回すことができる点が大きく違います。
■WITH句の使い方
With
‘作りたいテーブル名’(今回はget_top5_amount_id)
as
(
作成したいテーブルを作るクエリ
);
では先程と同じ「決済額の合計金額がTOP5のお客様のメールアドレスを取得したい」場合、WITH句だと以下のように書けます。
このWITH句では、WITH以下で新たにget_top5_amount_idテーブルを作っています。
中身はたった5レコード&2カラムの、以下のようなテーブルになります。
お気づきだと思いますが、上記の結果はWTIH句内の青く囲った部分の抽出結果になります。
そして赤色で囲った部分で、WITH句で作成したテーブルを使っています。
先ほどのサブクエリと比べて非常にわかりやすいですよね。
また冒頭でWITH句のメリットとして述べたように、
WITH句で書くとそのテーブル内で何度でも使い回すことができる点が大きく違います。
今回は先ほど作成したget_top5_amount_idテーブルを使って、
新たなクエリを作りたいと思います。
上記のクエリを見ていただくとお分かりになると思いますが、
get_top5_amount_idテーブルを使って、
新たにget_emailテーブルを作っています。
これは普通のサブクエリではできず、WITH句の非常に便利な機能の一つです。
WITH句まとめ
- WITH句の使い方
- With ’新たに作成したテーブル名’(今回はget_top5_amount_id) as
(作成したいテーブルを作るクエリ); - サブクエリと違って、可読性が非常に高く他者に共有しやすい。
- WITH句内で作ったテーブルはクエリ内で何度も使用できる。