GROUP BY の入れ忘れ候補

GROUP BY に入れ忘れた列を、実行前に候補として見つける。

SELECT 文を貼り付けると、選択リストの列が GROUP BY にも集約関数にも入っていない「抜け候補」を探します。主キーでグループ化した場合の関数従属は、利用者が入力した主キーをもとに扱います。入力はブラウザの外へ送信しません。

ツールを使う 入力例と結果

SELECT 文を貼り付けて GROUP BY の抜けを調べる

入力した内容は送信されません。貼り付けた文字や選んだファイルは、お使いのブラウザの中だけで処理します。本サイトのサーバーや第三者へ送信・保存しません(通信を禁止する設定でページを配信しています)。

結果

エラー 0 件・警告 1 件・情報 0 件

指摘(エラー・警告・情報)

  • 警告 1 行目 2 番目「name」: name は GROUP BY になく、集約関数の外にあります。GROUP BY に加えるか、max() などの集約関数で包んでください。同じ表の主キーで GROUP BY しているなら、主キーを入力欄に書くと従属として扱います(SELECT 文書 GROUP BY 句)。
選択リストの項目3 個
抜け候補1 個
OK2 個
判定不能0 個

項目ごとの判定

項目ごとの判定
#選択リストの式集約の外にある列判定理由
1statusstatusOKGROUP BY に同じ式(または位置番号・別名)がある
2namename抜け候補name が GROUP BY になく、集約関数の外にある
3count(*)-OK列は集約関数の中だけ

初期表示は入力例「GROUP BY にない列を選んでいる」の結果です。入力を変えるとその場で処理し直します。判定の根拠は仕様と根拠にまとめています。

ご利用にあたって

  • 結果は字句の読み取りにもとづく確認で、実際のデータベースでの解釈を保証するものではありません。
  • ドキュメントは PostgreSQL License で公開されています。このサイトはその内容を要約して参照しており、転載はしていません。

使い方

  1. 調べたい SELECT 文を入力欄に貼り付けます。
  2. 主キーで GROUP BY している場合は、その列を「主キー」欄に書きます(例: c.id)。
  3. 表の「判定」が抜け候補の項目を、GROUP BY に加えるか集約関数で包んで直します。

入力例と結果

代表的な入力・境界の入力・壊れた入力の例です。例ごとに入力・出力・指摘と、その結果になる理由(検算)を載せています。

入力例と結果の一覧
入力例結果
GROUP BY にない列を選んでいるエラー 0 件・警告 1 件・情報 0 件
主キーで GROUP BY した場合の関数従属エラー 0 件・警告 0 件・情報 2 件
集約関数だけの SELECTエラー 0 件・警告 0 件・情報 1 件
位置番号と出力列名で GROUP BY するエラー 0 件・警告 0 件・情報 1 件
集約も GROUP BY もない SELECTエラー 0 件・警告 0 件・情報 1 件

このツールでできないこと(制約)

よくある質問

集約関数だけで GROUP BY がない SELECT も調べますか?

調べます。count や max などの集約関数があると、GROUP BY がなくても集約の外の列は書けないためです(SELECT 文書 GROUP BY 句)。count(*) と列を同時に選ぶと抜け候補になります。

主キーを入力しないとどうなりますか?

主キーによる関数従属は使わず、GROUP BY にない列はすべて抜け候補になります。主キーで GROUP BY していて抜け候補が出たときは、主キー欄に書くと従属として扱います。

貼り付けた SQL はどこかに送られますか?

送られません。処理はお使いのブラウザの中だけで行い、ページは通信を禁止する設定(CSP の connect-src)で配信しています。