集計を使用しない GROUP BY クエリに対する MySQL の独自のアプローチ
Oracle や SQL Server のようなデータベース システムとは異なり、MySQL では集計関数を伴わない GROUP BY
句が許可されます。 これは、このようなクエリでは通常エラーが発生する標準 SQL の動作とは大きく異なります。 重要な質問は、MySQL が結果セット内の非集計列をどのように処理するかということです。
MySQL は、各グループの非集計カラムから任意の値を選択します。 この値は、常にではありませんが、そのグループ内で最初に検出される値であることがよくあります。 この動作の背後にある理論的根拠は、列が集計されていない、またはグループ化の一部ではない場合、その列を SELECT
リストに含めるかどうかは潜在的に任意であるという仮定に基づいています。 したがって、MySQL は単に代表値を返します。
ANSI 準拠と only_full_group_by
設定
GROUP BY
に対するこの緩和されたアプローチは、ANSI SQL 標準から逸脱しています。 MySQL は、only_full_group_by
SQL モードを提供することでこの問題に対処します。このモードを有効にすると、厳密な ANSI SQL 準拠が強制され、すべての非集計列を GROUP BY
句に含める必要があります。 これにより、予測可能で標準に準拠したクエリ結果が保証されます。
MySQL がこのアプローチを選択する理由
MySQL で非集計 GROUP BY
クエリを許可する決定は、パフォーマンスと使いやすさを優先します。 MySQL 5.0 マニュアルに記載されているように、この設計はクエリ処理を簡素化し、計算オーバーヘッドを削減し、より単純なユーザー エクスペリエンスを提供します。 これにより、明示的な集計操作の複雑さを必要とせずに、効率的なデータ取得が可能になります。
以上がMySQL は GROUP BY クエリの非集計列をどのように処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。