ホームページ >データベース >mysql チュートリアル >MySQL の GROUP BY 句が集計関数を使用しないと予期しない結果を引き起こすのはなぜですか?
MySQL の GROUP BY
句: 集計関数を使用しないと予期しない結果が発生する
SQL の GROUP BY
句はデータの集計に不可欠です。 ただし、SUM
ステートメントで集計関数 (AVG
、COUNT
、SELECT
など) を使用せずにその動作を使用した場合、特に MySQL では直観に反する可能性があります。
これを例で説明しましょう。 従業員データを含むテーブル emp
を考えてみましょう:
name | dept | salary |
---|---|---|
Jack | a | 2 |
Jill | a | 1 |
Tom | b | 2 |
Fred | b | 1 |
次のクエリ:
<code class="language-sql">SELECT * FROM emp GROUP BY dept;</code>
は、すべての個別の部門を取得することを意味しているように見えるかもしれません。 ただし、MySQL の出力は次のようになります:
name | dept | salary |
---|---|---|
Jill | a | 1 |
Fred | b | 1 |
なぜジャックとトムではなく、ジルとフレッドなのでしょうか?
MySQL の GROUP BY
最適化が原因です。集計関数がないと、MySQL は GROUP BY
句に含まれていないカラムの任意の値を選択する可能性があります。 この最適化では、グループ化されていない列が各グループ内で一貫していると (この場合は誤って) 仮定して速度を優先します。
覚えておくべき重要なポイント:
GROUP BY
句からカラムを省略すると、MySQL によるそれらのカラムの値の選択は予測できません。ORDER BY
は決定性を保証しません: ORDER BY
句を追加しても、このコンテキストでは結果が決定的になるわけではありません。この一見単純なクエリは、予測可能で信頼性の高い結果を保証するために、すべての非集計列を GROUP BY
句に明示的に含めることの重要性を強調しています。 そうしないと、一貫性がなく誤解を招く可能性のあるデータを取得する危険があります。
以上がMySQL の GROUP BY 句が集計関数を使用しないと予期しない結果を引き起こすのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。