SQL

【SQL】サブクエリはWTIH句が最強。可読性こそ現場での正義。

本記事概要

本記事の対象者

・SQLでのデータ分析を勉強されている方
・特に非エンジニアのマーケティング担当者やPMの方
【SQL練習】サンプルデータベースを用意するでMySQL公式のデータベースをローカルに作成されている方には特におすすめです。

本記事の目的

・サブクエリとは何か理解する。
・WITH句を使って可読性の高いサブクエリを作れるようになる!

そもそも「サブクエリ」とは?

完結に説明すると、クエリの中にクエリを作ることです。
クエリの中にクエリを作ることでより複雑なデータを取得することができます。
言葉だけではイメージが湧かないと思うので、以下が具体例になります。
使用テーブルはpaymentテーブルとcustomerテーブルです。

■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句内で作ったテーブルはクエリ内で何度も使用できる。

ABOUT ME
Okada Shogo
某Web系企業でアクセス解析やKPI管理をやってます。主にインハウスマーケターの方に向けて情報発信できればと思っております!