位置番号と出力列名で GROUP BY する
GROUP BY に位置番号 1 を書いた文を調べる例です。位置番号が選択リストの項目を指すため、その項目が OK と扱われることを確かめます。
入力
SQL
SELECT lower(name), count(*) FROM t GROUP BY 1
主キー(任意)
(空)
結果
エラー 0 件・警告 0 件・情報 1 件
指摘(エラー・警告・情報)
- 情報 全体 抜け候補は見つかりませんでした。
| 選択リストの項目 | 2 個 |
|---|---|
| 抜け候補 | 0 個 |
| OK | 2 個 |
| 判定不能 | 0 個 |
項目ごとの判定
| # | 選択リストの式 | 集約の外にある列 | 判定 | 理由 |
|---|---|---|---|---|
| 1 | lower(name) | name | OK | GROUP BY に同じ式(または位置番号・別名)がある |
| 2 | count(*) | - | OK | 列は集約関数の中だけ |
検算(この結果になる理由)
GROUP BY には出力列の位置番号を書けます(SELECT 文書 GROUP BY 句)。1 は選択リストの 1 番目 lower(name) を指すので、その項目は OK、count(*) は集約関数なので OK で、指摘はありません。
判定の根拠は仕様と根拠に、仕様の出典とともにまとめています。自分の入力で試すにはツールをお使いください。
このツールの制約
- 完全な SQL の構文解析はしません。誤検出を避けるため「抜け候補」と表示し、実行して確かめる前提です。
- 主キーによる関数従属は、利用者が入力した主キーを信じて扱います(PostgreSQL は主キーだけを認識します)。ユニーク制約は扱いません。
- サブクエリ・窓関数(OVER)・ROLLUP / CUBE / GROUPING SETS を含む項目は判定不能と表示します。
- 列名が重なる複数の表を結合した文で、別名をつけない列(修飾なし)の所属表は判定できません。HAVING と ORDER BY は調べません。
ご利用にあたって
- 結果は字句の読み取りにもとづく確認で、実際のデータベースでの解釈を保証するものではありません。
- ドキュメントは PostgreSQL License で公開されています。このサイトはその内容を要約して参照しており、転載はしていません。