GROUP BYのよくあるエラー

GROUP BYでエラーになる理由と直し方(「何を1行にしたいか」から逆算)

この記事で分かること

  • GROUP BY のエラーが出る典型パターンと、直す手順が分かる
  • 「集計の単位」を日本語で決めてからSQLに落とすコツが身につく
  • 集計後にJOINして行が増える事故を避けられる

結論:最初に「最終的に1行を何にするか」を決める

GROUP BY は「どの単位で1行に潰すか」を決める構文です。先に日本語で決めると、GROUP BY
に入れる列が自然に決まります。

最小例:顧客ごとの注文数

SELECT
  customer_id,
  COUNT(*) AS cnt
FROM
  orders
GROUP BY
  customer_id;

典型エラー1:GROUP BYにない列をSELECTしている

症状

  • 「この列はGROUP BYに含まれていない」系のエラー

直し方

  • その列を GROUP BYに追加する(=粒度を変える)
  • もしくは 集計関数をかけるMAX など)
  • あるいは、別クエリに分ける(まず集計→後でJOIN)

典型エラー2:意図と違う集計になっている(行が増える)

原因

  • 集計前にJOINして、1対多の「多側」を結合してしまっている

回避策

  • 先に集計で粒度を揃える→必要なら後でJOINする

練習問題(2問)

  1. 「日付ごとの注文数」を集計する(ordered_at は日付に丸める想定)
  2. 「顧客ごとの売上合計」を集計する(SUM(total)

次に読む

タイトルとURLをコピーしました