主キーで GROUP BY した場合の関数従属

顧客の主キー c.id だけで GROUP BY し、同じ表の c.name も選ぶ例です。主キーを入力すると、従属する列として抜け候補にならないことを確かめます。

入力

SQL

SELECT c.id, c.name, count(*) FROM customers c JOIN orders o ON o.cid = c.id GROUP BY c.id

主キー(任意)

c.id

結果

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

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

  • 情報 1 行目 2 番目「c.name」: c.name(主キー c.id に従属)。PostgreSQL では表の主キーが GROUP BY に入っていれば、同じ表の他の列は GROUP BY になくても書けます(SELECT 文書 GROUP BY 句)。主キーは入力欄の内容を信じています。
  • 情報 全体 抜け候補は見つかりませんでした。
選択リストの項目3 個
抜け候補0 個
OK3 個
判定不能0 個

項目ごとの判定

項目ごとの判定
#選択リストの式集約の外にある列判定理由
1c.idc.idOKGROUP BY に同じ式(または位置番号・別名)がある
2c.namec.nameOK主キーでグループ化しているため従属: c.name(主キー c.id に従属)
3count(*)-OK列は集約関数の中だけ

検算(この結果になる理由)

表の主キーが GROUP BY に入っていれば、同じ表の他の列は関数従属するため書けます(SELECT 文書 GROUP BY 句)。c.name は主キー c.id に従属するので OK、主キーを信じた旨の情報が 1 件出ます。

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

このツールの制約

ご利用にあたって

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

ほかの入力例