A.C.O.のカルチャーとノウハウを伝えるオウンドメディア

気に入ったらいいね!してね

A.C.O.のカルチャーとノウハウを伝えるオウンドメディア

PDCAサイクル用のデータ解析などに!ディレクター、Web担向け簡単SQL講座

TIPS

PDCAサイクル用のデータ解析などに!ディレクター、Web担向け簡単SQL講座
SHINJI

SHINJI

SHINJI

SHINJI

 
このエントリーをはてなブックマークに追加

こんにちは。情報設計・バックエンド エンジニアの進士(しんじ)です。CMSを用いたWEB製作が一般的となったことで、データベースを扱う頻度も増えたのではないでしょうか? データベースはWebサイトを作る以外にも有効活用することができるのです。今回はWebディレクターやWeb担当者でも簡単に扱える、データベースの利用方法を記載したいと思います。

CHAPTER 1

そもそもデータベースって何?

データベースとは、さまざまな情報を蓄積・検索・登録・更新・削除などを行うのに便利なよう、有機的に整理された情報の集まりです。何十万件、何千万件などの大量データを蓄積でき、データの検索・登録・更新・削除が簡単に行えるものです。行と列があるExcelのようなもので、データの入れ物を「テーブル」と呼びます。

また、データベースを操作するための言語をSQLと呼びます。SQLのコマンドを実行することで、さまざまな処理が可能になります。SQLにはMySQLやOracleなど種類があり、利用するデータベースの仕様などに応じ、SQLコマンドを使い分ける場合があるので注意してください。この記事ではMySQLを元にしていますが、考え方はどのデータベースでも共通です。

CHAPTER 2

なぜWebディレクターやWeb担当者がデータベースを知る必要があるの?

エンジニアではないWebディレクターやWeb担当者が、なぜデータベースやSQLを知る必要があるのでしょうか。答えはデータベースを使うことで、Google Analyticsでは限界があるデータ分析が可能になることと、グロース・マネジメントやマーケティングの視点でも役立つからです。

Google Analyticsではデータが反映されるまでに時間がかかりますが、基幹データを見に行けばタイムラグがなく結果を確認することができます。たとえば売上げ額や商品の在庫数などをリアルタイムで把握することが可能となるでしょう。また、Googleの仕様変更などによりトラッキングコードが変更されても、データベースは基幹側のシステムなので影響を受けません。

顧客ひとりひとりの動向や各商品の売れ行きなど、設定次第でさまざまな情報を取得することができるので戦略設計に必要なデータを集める際にも活躍します。PDCAサイクルを回すためにこの情報を取得したいというときは、データベースを用いることが非常に有効なのです。

また、必要なデータを取得するためのSQLを作成したら、次回以降は同じSQLを使うことですぐに結果を知ることができます。他の異なる情報を知りたい場合でも、すでに作ってあるSQLを応用することが可能です。

CHAPTER 3

テーブルを知ろう

それでは実際にデータベースを使ってみましょう。今回はサンプルとして、とあるECサイトの売れ行きを調査してみたいと思います。SQLを使うとなると、「いろいろ覚えないといけないんじゃないの?」「そんな時間ないよ!めんどくさいし!」などと感じるかもしれませんが、今回必要なのはデータ検索ができる「SELECT文」のみなのでとても簡単です。(CHAPTER 4で説明します)

以下の画像の売上、顧客、商品の表が「テーブル」です。1番上の行は「カラム」と呼ばれており、それぞれの列にあるデータを取得するための重要なものです。

テーブル
CHAPTER 4

テーブルから知りたい情報を取得しよう

ここで使うのがSQLコードの「SELECT文」です。「SELECT」から「;」までを「SELECT文」と呼びます。SELECT文はデータ検索を行うコードなので、誤ってデータを削除、更新してしまう恐れはありません。「SELECT文」の「SELECT」「FROM」は「SELECT句」「FROM句」と呼ばれ、データ検索をするために必須となる宣言です。

まずは売上番号ごとの受注数がどれくらいあるのか、以下のSELECT文を実行して結果を見てみましょう。

 SELECT           /* 「SELECT句 = 選び出す」ということなので、データを検索するための宣言 */
     SALE_NO      /* SALE_NO(売上番号) */
    ,QTY          /* QTY(受注数) */
 FROM             /* 「FROM句」 どのテーブルから検索を行うのか宣言 */
     SALE_TBL;    /* 検索を「SALE_TBL(売上テーブル)」から行う。「;」は終了を意味する宣言 */

すると、このように売上番号ごとの受注数が取得できます。(下図参照)

売上番号ごとの受注数
CHAPTER 5

取得した情報を見てみよう

CHAPTER 4だと何の商品がどの期間でいくら売れているのかわかりませんよね。なので、「商品CD」「商品名」「期間」ごとデータを見る必要があります。また、「受注数」と「単価」を掛け算して売上額を出します。

ここで注意が必要なのが「商品名」「単価」は違うテーブル「PRODUCT_TBL(商品テーブル)」にあるということです。「SALE_TBL(売上テーブル)」「PRODUCT_TBL(商品テーブル)」の2つのテーブルが混在してしまっているため、SQLがどっちのテーブルから何を取得すればいいのか迷ってしまいます。なので、どのテーブルからデータを取得すればいいのか分かるように、カラムの前にテーブル名をつけてあげます。

例:PRODUCT_TBL.PRODUCT_NM ← テーブルとカラムの間にドットをつけます

また、「PRODUCT_TBL(商品テーブル)」から商品名を取得するにあたり、何のデータの商品名をとればいいのか条件の紐付けを行う必要があります。複数のテーブルからデータを取得する場合は必ず紐付けを行う必要があります。「PRODUCT_TBL(商品テーブル)」と「SALE_TBL(売上テーブル)」の「PRODUCT_CD(商品CD)」のデータは一致するため、これを紐付けてあげます。紐付けは条件を判定してくれる「WHERE句」と呼ばれる宣言で行います。

例:SALE_TBL.PRODUCT_CD = PRODUCT_TBL.PRODUCT_CD ← 「SALE_TBL(売上テーブル)」にある「商品CD」 と「PRODUCT_TBL(商品テーブル)」にある「商品CD」をイコールで紐付けます。

  • ・「商品CD」「商品名」「期間」のカラムをSELECT句に付け足す。(カラムの前にテーブル名をつける。)
  • ・「PRODUCT_TBL(商品テーブル)」をFROM句に付け足す。
  • ・「PRODUCT_TBL(商品テーブル)」と「SALE_TBL(売上テーブル)」の「PRODUCT_CD(商品CD)」のデータは一致するため、これをWHERE句で紐付ける。(イコールで紐付ける)
 SELECT
     SALE_TBL.SALE_NO       /* 「SALE_TBL(売上テーブル)」にある「SALE_NO(売上番号)」 */
    ,SALE_TBL.PRODUCT_CD    /* 「SALE_TBL(売上テーブル)」にある「PRODUCT_CD(商品CD)」 */
    ,PRODUCT_TBL.PRODUCT_NM /* 「PRODUCT_TBL(商品テーブル)」にある「PRODUCT_NM(商品名)」 */
    ,PRODUCT_TBL.PRICE      /* 「PRODUCT_TBL(商品テーブル)」にある「PRICE(単価)」 */
    ,SALE_TBL.QTY           /* 「SALE_TBL(売上テーブル)」にある「QTY(受注数)」 */
    ,PRODUCT_TBL.PRICE * SALE_TBL.QTY  /* PRICE(単価) × QTY(受注数)で売上額 */
    ,SALE_TBL.DELIVERY_DATE /* 「PRODUCT_TBL(商品テーブル)」にある「DATE(納品日)」 */
 FROM
     SALE_TBL               /* 「SALE_TBL(売上テーブル)」 */
    ,PRODUCT_TBL            /* 「PRODUCT_TBL(商品テーブル)」 */
 WHERE
     SALE_TBL.PRODUCT_CD = PRODUCT_TBL.PRODUCT_CD /* 「SALE_TBL(売上テーブル)」にある「商品CD」 =  「PRODUCT_TBL(商品テーブル)」にある「商品CD」*/
;

このように全体の売上から何の商品がどの期間でいくら売れているのかが分かります。(下図参照)

全体の売上
CHAPTER 6

結果に基づくユーザー要素を見てみよう

どのようなユーザーが何の商品を購入しているのかを確認しましょう。先ほどのSQLを応用して、「CUSTOMER_TBL(顧客テーブル)」から必要なユーザー要素を引っ張ってきます。

  • ・「顧客CD」「顧客名」「性別」「年齢」「住所」のカラムをSELECT句に付け足す。
  • ・「CUSTOMER_TBL(顧客テーブル)」をFROM句に付け足す。
  • ・先ほどと同様にテーブル同士の紐付けを行う必要があるので、WHERE句に「CUSTOMER_TBL(顧客テーブル)」と「SALE_TBL(売上テーブル)」にある「CUSTOMER_CD(顧客コード)」を紐付る。条件が複数になるので「AND」でつなげてあげる。
 SELECT
     SALE_TBL.SALE_NO
    ,SALE_TBL.CUSTOMER_CD     /* 「SALE_TBL(売上テーブル)」にある「CUSTOMER_CD(顧客コード)」 (CUSTOMER_TBL(顧客テーブル)でもOK) */
    ,SALE_TBL.PRODUCT_CD
    ,PRODUCT_TBL.PRODUCT_NM
    ,PRODUCT_TBL.PRICE
    ,SALE_TBL.QTY
    ,PRODUCT_TBL.PRICE * SALE_TBL.QTY
    ,SALE_TBL.DELIVERY_DATE
    ,CUSTOMER_TBL.CUSTOMER_NM /* 「CUSTOMER_TBL(顧客テーブル)」にある「CUSTOMER_NM(顧客名)」 */
    ,CUSTOMER_TBL.GENDER      /* 「CUSTOMER_TBL(顧客テーブル)」にある「GENDER(性別」 */
    ,CUSTOMER_TBL.AGE         /* 「CUSTOMER_TBL(顧客テーブル)」にある「AGE(年齢)」 */
    ,CUSTOMER_TBL.ADDRESS     /* 「CUSTOMER_TBL(顧客テーブル)」にある「ADDRESS(住所)」 */
 FROM
     SALE_TBL
    ,PRODUCT_TBL
    ,CUSTOMER_TBL  /* CUSTOMER_TBL(顧客テーブル) */
 WHERE
     SALE_TBL.PRODUCT_CD  = PRODUCT_TBL.PRODUCT_CD
 AND SALE_TBL.CUSTOMER_CD = CUSTOMER_TBL.CUSTOMER_CD /* 「CUSTOMER_TBL(顧客テーブル)」と「SALE_TBL(売上テーブル)」にある「CUSTOMER_CD(顧客コード)」 */
;

このように、どのような人が何の商品を購入しているのかわかります。(下図参照)

全体の売上とユーザー情報

こういった結果から、どんな人が何の商品を購入しているのかがわかり、ユーザー要素を細かく見ることができます。

例えば、顧客名「やまだ あゆみ」さんは年齢が20代の女性で、限定ギフトチョコを大量に購入している。納品日を見ると2月10日だから、もしかしたら14日のバレンタインに会社の人に配るのだろうか? 他のユーザーでも売れ行きがいいようなら次回からは限定商品としてではなく恒久的な商品として扱おう。などの戦略が立てられます。

初めはとっつきにくいSQLですが、慣れてしまえばとても可愛いものです。データをすぐ見たいのに、Google Analyticsに反映される時間を待ったり、エンジニアにお願いする手間が省けます。また、周りから知りたいデータを聞かれた時に「俺そのデータわかるよ。(ドヤッ)」ってSQLコマンド叩いてたらかっこいいですよね!(笑)ぜひ、チャレンジしてみてください。ここまで読んでいただき、本当にありがとうございました。

このエントリーをはてなブックマークに追加 follow us in feedly

WRITER

shinji

進士 智世

SHINJI TOMOYO
BACK-END ENGINEERING / INFORMATION ARCHITECT

聖徳大学短期大学部総合文化学科卒業。ECサイト・物流システムのプログラマーを経て、現在に至る。バックエンド・情報設計担当。現在は外部パートナー。

SHINJI'S POSTS

Photo Shooting CHI YUN YEH

A.C.O. JOURNAL by A.C.O. Inc.

A.C.O. のカルチャーとノウハウを伝えるオウンドメディア

A.C.O. Journal

気に入ったら
いいねしてね!

Facebook で A.C.O. の最新情報を配信中です!

A.C.O. パートナーカモン!

BACK TO HOME