ホームページ >データベース >mysql チュートリアル >MySQL の GROUP BY クエリで「only_full_group_by」エラーが発生するのはなぜですか?

MySQL の GROUP BY クエリで「only_full_group_by」エラーが発生するのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-29 13:44:10189ブラウズ

Why Does My MySQL GROUP BY Query Produce a

SELECT 最適化の問題を理解する

MySQL では、GROUP BY 句を使用する場合、すべての非集計カラムをグループ化された列に機能的に依存しない SELECT リスト。これは、sql_mode=only_full_group_by 設定によって強制されます。

クエリ:

SELECT *
FROM `tbl_customer_pod_uploads`
WHERE `load_id` = '78' AND
      `status` = 'Active'
GROUP BY `proof_type`

が実行されると、ID 列が GROUP BY 句に含まれていないため、このルールに違反します。これにより、次のエラーが発生します:

Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'returntr_prod.tbl_customer_pod_uploads.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

解決策のオプション

この問題を解決するには、いくつかのオプションがあります:

1。 Only_full_group_by モードを無効にする:

これは次のコマンドを使用して実行できます:

SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

ただし、これは不正確な結果につながる可能性があるため推奨されません。

2. GROUP BY 句にすべての列を含める:

このオプションは、GROUP BY 句にすべての非集計列を明示的に含めることで、only_full_group_by モードへの準拠を保証します:

SELECT *
FROM `tbl_customer_pod_uploads`
WHERE `load_id` = '78' AND
      `status` = 'Active'
GROUP BY `proof_type`, `id`

3.集計関数の使用:

特定の列を選択するのではなく、クエリは集計関数を利用してグループ化された行からデータを抽出し、ベスト プラクティスを遵守しながら問題に対処できます:

SELECT `proof_type`, COUNT(*) AS `row_count`
FROM `tbl_customer_pod_uploads`
WHERE `load_id` = '78' AND
      `status` = 'Active'
GROUP BY `proof_type`

このアプローチにより、不要なデータの取得が回避され、パフォーマンスが最適化されます。

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

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