CHAPTER 4 · 10 LESSONS · 124 問

実データで分析する

売上や利用者のデータに、ここまでの書き方を組み合わせて答えを出す。

ここまでの章では、「この書き方を覚えよう」という順にレッスンが並んでいた。この章は違うよ。問いのほうが先に来る

「先月いちばん売れた商品は何か」「リピーターは何割いるか」「売上が落ちている曜日はどこか」。こういう問いに、ここまでで覚えた道具を自分で選んで組み合わせて答えを出す。使う文法に新しいものはほとんど無い。組み立てる力を鍛える章だよ。

実際に手を動かすと分かるけれど、詰まるのは文法ではないことが多い。詰まるのはたいてい問いの読み替えだ。「リピーターは何割いるか」と言われて、そのまま書ける SQL は無い。まず「リピーターとは、2回以上買った人のことだ」と言い直す。次に「購入回数を人ごとに数えて、2以上の人を数える」に直す。ここまで来れば、あとは書くだけだよ。

この読み替えの手順を、意識して身につけてほしい。

  • 何を1件と数えるのか をはっきりさせる(注文か、商品か、人か)
  • どの表に必要な情報があるか を探す
  • 絞るのは集計の前か後か を決める
  • 小さく書いて動かし、結果を見てから足していく

最後のものがとくに大事だよ。長いクエリを一息に書いて、答えが合わないと、どこが悪いのか分からなくなる。まず絞り込みだけを書いて結果を見る。正しければ集計を足す。それも合っていたら並べ替えを足す。一段ずつ確かめながら積むのが、結局いちばん速い。

もうひとつ覚えておきたいのが、出た数字を疑うことだよ。SQL は書いたとおりに動くので、間違ったクエリでも堂々と数字を返してくる。エラーが出ないことは、答えが正しいことを意味しない。件数が想定と桁違いに多いときは結合のしかたを疑う。少ないときは、結合で消えた行がないかを疑う。

確かめ方もいくつか持っておくといい。全体の件数を先に数えておいて、絞り込んだ後の件数と比べる。合計を出したら、いくつかの行を手で足して合っているか見る。地味だけれど、こうした確認が桁の間違いを拾ってくれる。

もうひとつ、答えを出したあとに「それで何が言えるか」まで考える習慣もつけたい。「木曜の売上が低い」という数字が出たとして、そこから何をすべきかは数字だけでは決まらない。木曜が定休日の店が多いのかもしれない。データは判断の材料であって、判断そのものではないよ。

この章のレッスンは、答えにたどり着くまでに何度か書き直すことになるはずだ。それが普通だと知っておいてほしい。一発で正しいクエリを書ける人はいない。書いて、結果を見て、違ったら直す。その回数が経験になる。

問いに答えが出たら、それを1文で言えるかも確かめてみよう。「木曜の売上は他の曜日より3割低い」のように言い切れれば、その分析は伝わる形になっている。表が出ただけでは、まだ答えたことにならないよ。

書いたクエリは、あとで自分が読み返すことになる。改行とインデントを入れて、命令ごとに行を分けるだけで、読みやすさがまるで違うよ。1行にぎっしり詰めたクエリは、書いた本人でも翌日には読めない。

扱うデータも、これまでの練習用のものより現実に近い形になる。項目が多く、値の入っていない行もあり、そのままでは答えが出ない。きれいに整ったデータは現実にはあまり無いということも、この章で体験しておいてほしいことのひとつだよ。

この章を抜けると、SQL は「勉強したもの」から「使える道具」になる。データを渡されて「これで何が分かる?」と聞かれたときに、自分で問いを立てて答えを出せる。それが目指すところだよ。

この章のレッスン

目的から問いを立てる

  1. 39分析するお店を知る架空の通販サイトの3つの表を読んで、知りたいことをクエリに分解する手順をつかもう。 問題へ
  2. 40会員を属性ごとに数える地域ごと・会員種別ごとに人数や平均年齢を出して、会員の顔ぶれをつかもう。 問題へ
  3. 41商品をカテゴリでまとめるカテゴリごとの商品数・平均価格・在庫を出して、品ぞろえの形をつかもう。 問題へ
  4. 42条件をつけて比べる絞ってから数えるか数えてから絞るかを使い分けて、もうけの大きさをカテゴリごとに比べよう。 問題へ
  5. 43商品分析 総合演習商品分析のまとめ。基礎問題はなく、練習10問で絞り込みとグループ化を重ねて解こう。 問題へ
  6. 44注文を数える件数と個数のちがいを押さえて、購入履歴を会員ごと・商品ごとにまとめよう。 問題へ
  7. 45売上と利益を計算で出す表に入っていない金額を、結合と掛け算で作り出して集計しよう。 問題へ
  8. 46月ごとに並べて変化を見る日付から月を取り出してまとめ、売上や件数が月ごとにどう動いたかを読もう。 問題へ
  9. 47会員を結合とサブクエリで見る会員と購入履歴をつなぎ、買っていない人や平均との差をサブクエリであぶり出そう。 問題へ
  10. 48分析編 総仕上げ分析編のまとめ。基礎問題はなく、練習10問で結合・集計・絞り込みを総動員して答えを出そう。 問題へ

つぎは「追加・更新・削除」。読むだけでなく、行を足す・書き換える・消す。アプリからデータを動かす操作。