ホームページ >データベース >mysql チュートリアル >MySQL は成功するのに、PostgreSQL の GROUP BY クエリが失敗するのはなぜですか?

MySQL は成功するのに、PostgreSQL の GROUP BY クエリが失敗するのはなぜですか?

DDD
DDDオリジナル
2025-01-18 09:56:12720ブラウズ

Why Does My PostgreSQL GROUP BY Query Fail While MySQL Succeeds?

PostgreSQL の厳密な GROUP BY 句とエラー処理

PostgreSQL で SELECT * FROM the_table GROUP BY col2 のようなクエリを実行すると、「列 "the_table.col3" は GROUP BY 句に表示されるか、集計関数で使用される必要があります。」というエラーが発生します。これは、PostgreSQL が SQL 標準に厳密に従っており、SELECT リスト内のすべての列が GROUP BY 句に含まれるか、集計関数の一部である必要があるためです。

集計関数: 解決策

SUM()MIN()MAX()AVG() などの COUNT()集計関数は、一連の値から単一の値を計算します。 PostgreSQL エラーを修正するには、GROUP BY 句に存在しない列に集計関数を適用する必要があります。

MySQL の非標準動作

MySQL の GROUP BY のより寛大な処理は、非標準の拡張機能です。 GROUP BY 句にない非集計列を選択することはできますが、選択された値は非決定的です。 MySQL は基本的に、これらのカラムの各グループから任意の値を選択します。 これにより、予測不能で一貫性のない結果が生じる可能性があります。

PostgreSQL のより厳密なアプローチにより、一貫性と再現性のあるクエリ結果が保証されます。

PostgreSQL クエリの修正

PostgreSQL クエリを修正するには、col3 (および GROUP BY 句にない他の列) で集計関数を使用します。例:

<code class="language-sql">SELECT col2, MIN(col3) AS col3, MIN(col1) AS col1
FROM the_table
GROUP BY col2;</code>

この改訂されたクエリでは、MIN() を使用して、col3 で定義された各グループの col2 の最小値を選択します。 希望する結果に基づいて、適切な集計関数 (MAX()AVG() など) を選択する必要があります。

以上がMySQL は成功するのに、PostgreSQL の GROUP BY クエリが失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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