ホームページ >データベース >mysql チュートリアル >GROUP BY 句を含む PostgreSQL クエリでエラーがスローされるのはなぜですか?

GROUP BY 句を含む PostgreSQL クエリでエラーがスローされるのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-18 10:05:09244ブラウズ

Why Does My PostgreSQL Query with a GROUP BY Clause Throw an Error?

PostgreSQL GROUP BY エラーの詳細な説明

PostgreSQL で GROUP BY 句を使用してデータベース テーブルをクエリする場合、SELECT リストに含まれているが集計されていないすべての列は、GROUP BY 句に含めるか、集計関数の引数として使用する必要があります。 このエラーは、特定の列 (col2 など) でグループ化しようとしたが、SELECT ステートメントに集計されていない他の列 (col3col1 など) が含まれている場合に発生します。

集計関数

集計関数を使用すると、複数行のデータを要約できます。一般的な集計関数には次のものがあります:

  • 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 で定義された各グループ内の col3col1 の最小値を取得します。

集計関数を使用することで、クエリは戻り値の一貫性が確保され、PostgreSQL の GROUP BY 句の要件に準拠していることが保証されます。

以上がGROUP BY 句を含む PostgreSQL クエリでエラーがスローされるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。