この記事は「データベーススペシャリスト資格に興味はあるが、どのようなものか?どう学ぶのか?」という方向けに、具体的な内容と私自身の挑戦ログをお伝えする。学び中の方や、これから学ぼうとされる方の参考になれば幸いだ。
今回はSQLによるデータ分析(サブクエリ応用)について書く。
※注意点として、SQLはDBMSによって作法が異なる。この記事はGoogle Big Queryに準拠するものであることをお含みおき願いたい。
特定商品の有無別に平均注文金額を比較する
前回振り返り
- SQLについて。現在は「仮想テーブル」を扱う操作のうち、最も柔軟に利用できる「サブクエリ」について学んでいる。前回はサブクエリの応用として、テーブル構造の変換(注文履歴からユーザー単位のテーブルを作成)について学んだ。
- 今回はサブクエリの応用として、データ分析(特定商品の有無別に平均注文金額を比較)について書く。
サンプルの紹介
- 以下のような、販売実績がまとまったテーブル(small_item)を対象にする。
- 1回の注文(order_id)で、どの商品が(item)が、いくらで販売されたか(revenue)を管理している。なお、1回の注文で複数の商品が販売可能な前提とする。
分析の観点
- 実際のデータベースも上記のように、1回あたりの販売履歴で管理するのが一般的だろう。
- さて、もしある1商品のみプロモーション施策を打てるとしたら、どの商品が適切だろうか。
- まず単純な販売総額で言うと、以下のとおり商品Aが最も高い。
- しかし、このECサイトはまとめ買いができるので、「商品Aが含まれている注文は、そうでない注文に比べ、平均注文金額が高いか?」も仮説検証してみたい。
- そこで、販売実績テーブル(small_item)を元に、「商品Aが含まれている注文と、そうでない注文の、平均注文金額を管理したテーブル」を作成する。
SQL実践(フラグ追加)
- まずは愚直に、商品Aが含まれている注文か、そうでないかを簡単に区別するため、フラグを追加することにする。
- これは、以下のとおり基本的なif句を用いて実現できる。
SQL実践(注文のグループ化)
- 次に、作成したテーブルを注文単位で束ねる。具体的には以下のとおり、サブクエリとグループ化の組み合わせとなる。
- なお、group句は集計関数を用いるため、max(flg)としているのはポイント
SQL実践(柔軟なグループ化)
- 最後に、「商品Aを含む注文か、そうでないか」という柔軟なグループ化を行う。(過去の記事はこちら)そのうえで、平均注文金額を求める。
- これは、サブクエリ、グループ化、if句を組み合わせたものとなる。具体的には以下。
SQLにおいて重要と感じること(再掲)
- 一つ一つの要素はシンプルかつ簡単。例えば上で実践したSQLも最後だけ見るとよく分からないが、過程の積み重ねを見れば一つ一つは簡単であることが分かる。
- 実際に手を動かすことが大事。初めてSQLを学んだときは「SQLは言語だから」くらいの理由で納得していた。しかし手を動かすことの真意は「作っていて楽しく、その楽しさが継続につながる」からだと、今ならわかる。
- 学びやすい環境を選ぶこと。あらためてテーブルやクエリを直感的に管理できるBig Queryの便利さを痛感している。例えば上で実践したSQLも、個々用意したクエリを都度コピペし書き加えているだけ。クエリのシート管理(以下赤枠)とコピペの容易さ(以下青枠)は、特にサブクエリと非常に相性が良い。
考察
- SQLについて。現在は「仮想テーブル」を扱う操作のうち、最も柔軟に利用できる「サブクエリ」について学んでいる。今回はサブクエリの応用として、データ分析(特定商品の有無別に平均注文金額を比較)について学んだ。
- 考察。「自由度」と並び「明確さ」も仕事の幸福を決める大事な要素。目的が不明確なタスクと上司からの一貫しない指示は心身を蝕む。さながら「穴を掘っては埋める」刑罰のように。いずれにせよ「何が良く、何が悪いのか。それはなぜか。」をしっかりと考え、理解することは重要だと感じる。
考察のシンプル化と英訳(練習中)
- boss’s double bind and unclear vision will hurt your health. So, I believe understanding this fact important.
- (上司のダブルバインドと不明瞭なビジョンはあなたの健康を害します。ですから、この事実を理解することが重要だと思います)
参考書籍
- 集中演習 SQL入門/木田和廣/株式会社インプレス
- 科学的な適職/鈴木 祐/株式会社クロスメディア・パブリッシング
コメント