ホームページ >データベース >mysql チュートリアル >MySQL は成功するのに、PostgreSQL の GROUP BY クエリが失敗するのはなぜですか?
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 サイトの他の関連記事を参照してください。