PostgreSQL GROUP BY エラーの詳細な説明
PostgreSQL で GROUP BY
句を使用してデータベース テーブルをクエリする場合、SELECT
リストに含まれているが集計されていないすべての列は、GROUP BY
句に含めるか、集計関数の引数として使用する必要があります。 このエラーは、特定の列 (col2
など) でグループ化しようとしたが、SELECT
ステートメントに集計されていない他の列 (col3
や col1
など) が含まれている場合に発生します。
集計関数
集計関数を使用すると、複数行のデータを要約できます。一般的な集計関数には次のものがあります:
COUNT
(レコード数)SUM
(列の合計を計算します)MIN
(最小値を求める)MAX
(最大値を求める)AVG
(平均を計算)MySQL と PostgreSQL の GROUP BY 処理の違い
MySQL は、PostgreSQL とは異なる方法で GROUP BY
句を処理します。 MySQL では、SELECT
リストに GROUP BY
句に現れない未集計の列が含まれている場合でも、それは許可されます。ただし、これらの列によって返される値はレコード間で任意に異なる可能性があり、不一致が発生する可能性があります。
対照的に、PostgreSQL は SQL 標準に厳密に従っており、集計されていない列は GROUP BY
句に含めるか、集計関数の引数として使用する必要があります。
解決策
PostgreSQL でこのエラーを解決するには、非集計列で集計関数を使用するようにクエリを書き換えます。例:
<code class="language-sql">SELECT col2, MIN(col3) AS min_col3, MIN(col1) AS min_col1 FROM the_table GROUP BY col2;</code>
このクエリは、MIN
集計関数を使用して、col2
で定義された各グループ内の col3
と col1
の最小値を取得します。
集計関数を使用することで、クエリは戻り値の一貫性が確保され、PostgreSQL の GROUP BY
句の要件に準拠していることが保証されます。
以上がGROUP BY 句を含む PostgreSQL クエリでエラーがスローされるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。