📊 Group関数・Group by句・Having句
🍚 そもそもGroup関数って何?
Group関数は、「まとめて計算してくれる関数」のことです。たとえば:
人 | 支出(円) |
---|---|
太郎 | 100 |
次郎 | 200 |
太郎 | 300 |
と書くと、全員の合計支出(100 + 200 + 300 = 600) を出してくれます。
これが SUM()
という**Group関数(集約関数)**の働きです。
他にもあるGroup関数たち:
関数名 | 何をする? |
---|---|
SUM() | 合計を出す |
AVG() | 平均を出す |
MAX() | 最大値を出す |
MIN() | 最小値を出す |
COUNT() | 件数を数える |
👥 Group by句って何?(グループ分けして計算)
Group関数が「まとめて計算」だとすると、
Group by句は「誰ごとにまとめるか」を指定する文です。
例:人ごとの支出合計を出したい!
このSQLの意味:
「人ごとにグループを作って、支出を合計してね!」
人 | 合計支出 |
---|---|
太郎 | 400 |
次郎 | 200 |
Group関数と一緒に使うのが GROUP BY
です!
🎯 Having句って何?(グループに条件をつける)
「WHERE句と何が違うの?」って疑問、ありますよね。
答えはカンタン。HAVING
は「グループに対する条件」です。
例:合計支出が300円以上の人だけを出す
人 | 合計支出 |
---|---|
太郎 | 400 |
WHERE
は 行単位での条件
💡 HAVING
は グループ単位での条件
🚨 ポイント
ポイント | 内容 |
---|---|
GROUP BY に指定していない列は SELECT に書けない | SELECT 人, 年齢, SUM(支出) ←ダメ(年齢はGROUP BYしてない) |
GROUP BY より前に WHERE を書く | WHERE → GROUP BY → HAVING の順番が正しい |
HAVING で使う条件は GROUP BY した列 or Group関数に限る | HAVING 年齢 = 20 ←NG(年齢でグループ化してない) |
COUNT(*) vs COUNT(列名) の違い | COUNT(*) はNULLもカウント、COUNT(列名) はNULLを除外 |
NULLの扱い | SUM(NULL) はNULLになるが、グループ化はNULLも1グループになる |
💡 実務での使いどころ
-
売上レポートで「店ごとの売上合計」を出す
-
社員ごとの「平均残業時間」を出す
-
商品カテゴリごとの「購入数が100件以上のカテゴリ」を抽出する(
HAVING
)
✍️ まとめ:これだけ覚えておけばOK!
要素 | 意味 |
---|---|
Group関数 | 複数の行を1つにまとめて計算 |
Group by句 | 「誰ごとにまとめるか」を指定する |
Having句 | グループ化したあとに条件をつける |
🧠 おまけ:覚え方(超雑だけど覚える)
-
Group関数 →「全員分の合計や平均、数を計算したい!」
-
Group by →「あ、でも人ごとに分けて計算したい!」
-
Having →「で、その中で条件に合うやつだけ出して!」