SQL初めてのSQL

Day 2まとめる・つなぐ — 集計とJOIN

種類ごとにまとめる — GROUP BY

GROUP BYで「カテゴリ別」「日別」のようにグループごとに数え直す。

「全体で1つ」ではなく「種類ごとに1つ」

前のレッスンのCOUNTやSUMは、全体をまとめて1つの数字にしました。でも実務では「カテゴリ別の件数」「日別の売上」のように、種類ごとに分けて数えたいことが多いです。そこで登場するのがGROUP BY(グループ・バイ)です。

たとえるなら、たくさんのカードをまず「色ごとの山」に分けて、それぞれの山の枚数を数える動きです。GROUP BY category と書くと「categoryが同じものを1つの山にまとめてね」という意味になり、その山ごとにCOUNTやSUMが働きます。

カテゴリ別の件数を出す

SQL
SELECT category, COUNT(*)
FROM items
GROUP BY category;
itemsをcategoryごとの山に分け、山ごとの件数を出す。結果は「本 12」「文具 30」のようにカテゴリごとに1行ずつ。

ポイントは、GROUP BY category と書くと、category列を一緒にSELECTに並べてよくなることです。前のレッスンで「集計と普通の列は混ぜられない」と言いましたが、GROUP BYで山に分けた基準の列(ここではcategory)なら、山ごとに1つに決まるので並べられます。

売上をカテゴリ別に合計する

SQL
SELECT category, SUM(price)
FROM orders
GROUP BY category;
注文をカテゴリ別の山に分け、山ごとの売上合計を出す。実務でよくある「カテゴリ別売上」の形。

なぜ実務で山ほど使うのか

経営や分析の質問は、たいてい「〜別に」の形をしています。地域別の会員数、月別の売上、商品別の注文数。この「〜別に数える」を一手にこなすのがGROUP BYなので、集計SQLの中心になります。

AIにはこう聞く

「ordersテーブルをカテゴリ別に売上合計を出したい。GROUP BYを使ったSQLを書いて、なぜcategoryをSELECTに並べられるのかも説明して」と頼むと、GROUP BYの考え方が腹落ちします。

読んでも腑に落ちない所は、AIに噛み砕いてもらいましょう。

理解度チェック

答えられれば、面接で説明できる状態に一歩近づきます。

Q1

GROUP BY category は、ざっくり何をする指示?

Q2

SELECT category, COUNT(*) FROM items GROUP BY category; はどんな結果になるか、カードを色ごとに分けるたとえで説明してください。

記述式です。まず自分の言葉で答えを考えてから、模範解答を開いて自己採点してください。