Navicat プレミアム 16 バージョン
このエラーは、新しいバージョンの MySQL で有効になっているデフォルト モードが原因です
ONLY_FULL_GROUP_BY
。つまり、 GROUP BY ステートメントの SELECT リストにはグループ化関数または集計関数のみを含めることができ、他の列を含めることはできません。senior_two.score.student_id
また、クエリ ステートメントにグループ化も集計もされていない列があるため、MySQL はこのエラーを報告しました。元の文:
SELECT * FROM score LEFT JOIN course on score.course_id=course.course_id GROUP BY course.course_name
実行後のエラー:
1055 - SELECT リストの式 #1 は GROUP BY 句になく、GROUP BY 句の列に機能的に依存していない非集計列 'senior_two.score.student_id' を含んでいます。これは sql_mode=only_full_group_by と互換性がありません
この問題を解決するには 2 つの方法があります。
- クローズ
ONLY_FULL_GROUP_BY
モード。:mysql> インターフェイスに次のコマンドを入力して、インターフェイスを閉じます。
SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','');
2.
senior_two.score.student_id
カラムを GROUP BY リストに追加して、MySQL がカラムの処理方法を認識できるようにします。たとえば、クエリを次のように変更します。
SELECT senior_two.score.student_id, AVG(senior_two.score.score) AS avg_score FROM senior_two.score GROUP BY senior_two.score.student_id;
このクエリは学生 ID ごとにグループ化し、各学生の平均スコアを計算します。このようにすると、MySQL は上記のエラーを報告しなくなります。