ホームページ >データベース >mysql チュートリアル >PostgreSQL で GROUP BY または集計関数に非集計列が必要なのはなぜですか?
PostgreSQL の GROUP BY
句: 一般的なエラーの解決
PostgreSQL の厳密な GROUP BY
動作により、多くの場合、「列 "the_table.col3" は GROUP BY 句に表示されるか、集計関数で使用される必要があります。」というエラーが発生します。 この記事では、この動作を明確にし、解決策を提供します。
SQL の集計関数を理解する
MIN
、MAX
、SUM
、COUNT
、AVG
などの集計関数は、グループ内のデータを集計します。複数の入力値から単一の結果を生成します。
PostgreSQL GROUP BY
エラーの説明
GROUP BY
句が適切な集計関数なしで使用されると、エラーが発生します。 クエリは、グループ化の一部ではない他の非集計列 (col2
、col3
) を選択しながら、非集計列 (col1
など) に基づいて行をグループ化しようとします。 PostgreSQL では、選択されたすべての非集計列が GROUP BY
句に含まれるか、集計関数によって処理されることが要求されます。
PostgreSQL と MySQL GROUP BY
の処理
MySQL の GROUP BY
実装はそれほど厳密ではありません。 GROUP BY
句に存在しない非集計列を選択できる場合がありますが、特にそれらの列がグループ内で異なる値を持つ場合、予測できない値が発生する可能性があります。 この動作は標準 SQL に準拠していません。
PostgreSQL GROUP BY
クエリの修正
PostgreSQL エラーを修正するには、SELECT
リスト内のすべての非集計列に集計関数を適用します。 例:
<code class="language-sql">SELECT col2, MIN(col3) AS col3, MIN(col1) AS col1 FROM the_table GROUP BY col2;</code>
この改訂されたクエリにより、正確なグループ化が保証され、各グループ内の col3
と col1
の最小値が計算されます。
ベスト プラクティスと SQL 標準
データの一貫性と予測可能な結果を保証するために、常に GROUP BY
とともに集計関数を使用してください。 これは SQL92 標準に準拠しており、SELECT
リスト内の非集計列は GROUP BY
句内に存在するか、グループ化列に機能的に依存する必要があります。
以上がPostgreSQL で GROUP BY または集計関数に非集計列が必要なのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。