GROUP BY にない列を選んでいる

status で GROUP BY しているのに、選択リストに GROUP BY にも集約関数にもない name を入れてしまった例です。抜け候補として指摘されることを確かめます。

入力

SQL

SELECT status, name, count(*) FROM orders GROUP BY status

主キー(任意)

(空)

結果

エラー 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 があると、未グループ化の列は集約関数の外で参照できません(SELECT 文書 GROUP BY 句)。status は GROUP BY にあり、count(*) は集約関数なので OK、name だけが抜け候補になり、警告が 1 件出ます。

判定の根拠は仕様と根拠に、仕様の出典とともにまとめています。自分の入力で試すにはツールをお使いください。

このツールの制約

ご利用にあたって

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

ほかの入力例