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