CHAPTER 2 · 11 LESSONS · 140 問
集める・数える
合計・平均・件数を出し、グループごとにまとめる。データから傾向を読む書き方。
前の章では、表から行を取り出すことを覚えた。1件1件のデータを見る操作だよ。でも仕事でデータを見るとき、知りたいのは1件のことではないほうが多い。
「今月の売上はいくらか」「会員は何人いるか」「いちばん売れている商品は何か」。どれもたくさんの行を1つの数字にまとめる問いだ。この章はそのための回だよ。
まず覚えるのが 集計する道具。件数を数える、合計を出す、平均を出す、最大と最小を取る。この5つでたいていの問いに答えられる。100万行あっても書くことは同じで、行数を意識せずに済むのが SQL の強みだ。
ここで一段おもしろくなるのが グループ分け だよ。全体の合計ではなく、「カテゴリごとの合計」「月ごとの件数」を出したくなる。そういうときは「この列の値が同じものをひとまとめにして、それぞれで集計して」と指示する。すると、まとめた数だけ結果の行が出てくる。
グループ分けは、表の形が変わるという点でそれまでの操作と違う。それまでは「元の表から行を減らす・列を選ぶ」だけだった。グループ分けをすると、元の表には無かった行——「カテゴリAの合計は12,000」という要約の行——が新しく作られる。この感覚がつかめると、集計の書き方が一気に理解できるよ。
もうひとつ、この章には引っかかりやすいポイントがある。絞り込みには2つの段階があるということだ。「集計する前に、対象の行を絞る」のと、「集計した結果に対して絞る」のは別の操作で、書く場所も使う言葉も違う。
- 集計の前 — 「今年のデータだけを対象にする」
- 集計の後 — 「合計が10,000を超えたカテゴリだけ見せる」
この2つを取りちがえると、動かないか、答えが合わない。混乱したときは「これは集計の前の話か、後の話か」と自分に聞くといいよ。
もうひとつ気をつけたいのが、値が入っていない行の扱いだよ。件数を数えるとき、「行の数」を数えるのか「値が入っている行の数」を数えるのかで結果が変わる。平均を出すときも、空の行は計算から外れる。0として扱われるわけではないので、「平均が思ったより高い」というときはここを疑ってみよう。
グループ分けと並べ替えを組み合わせると、いっそう実用的になる。「カテゴリごとの売上を出して、多い順に並べる」と書けば、売れ筋がそのまま上から並ぶ。さらに上位のいくつかだけに絞れば、報告にそのまま使える形になるよ。
同じ値をまとめるという発想は、集計以外にも効いてくる。「このカラムにはどんな値が入っているのか」を知りたいとき、グループ分けをすれば重複のない一覧が得られる。知らないデータを渡されたとき、まず全体を眺めて、次にこれで中身の種類を確かめる。実務での第一歩はたいていこの形だよ。
出てきた列に分かりやすい名前をつけるのも覚えておこう。何もしないと、計算式がそのまま列の見出しになって読みにくい。別名をつければ「合計金額」のように表示できる。人に見せる結果を作るときに効いてくるよ。
書くときの順番にもコツがある。いきなり集計を書かず、まず集計せずに結果を出してみること。対象の行が想定どおりかを目で確かめてから、集計をかぶせる。そうすれば、答えが変なときに「絞り込みが悪いのか、集計が悪いのか」を切り分けられるよ。
集計は、データを持っているだけの状態から、データで判断できる状態への橋だ。行を眺めているだけでは見えなかった傾向が、集計すると数字として立ち上がってくる。ここが SQL のいちばんおもしろいところかもしれないよ。
この章のレッスン
まとめて計算する