Versión Navicat Premium 16
Este error se debe al modo predeterminado habilitado en la nueva versión de MySQL
ONLY_FULL_GROUP_BY
, es decir, la lista SELECT en la declaración GROUP BY solo puede contener funciones de agrupación o agregación, y no puede contener otras columnas. Y hay una columna en su declaración de consultasenior_two.score.student_id
, que no está agrupada ni agregada, por lo que MySQL informa este error.Oración original:
SELECT * FROM score LEFT JOIN course on score.course_id=course.course_id GROUP BY course.course_name
Error después de ejecutar:
1055 - La expresión #1 de la lista SELECT no está en la cláusula GROUP BY y contiene la columna no agregada 'senior_two.score.student_id' que no depende funcionalmente de las columnas en la cláusula GROUP BY; esto es incompatible con sql_mode=only_full_group_by
Hay dos formas de resolver este problema:
- Modo de cierre
ONLY_FULL_GROUP_BY
. Ingrese el siguiente comando en la interfaz :mysql> para cerrarlo:
SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','');
2. Agregue
senior_two.score.student_id
la columna a la lista GROUP BY para que MySQL sepa qué hacer con la columna. Por ejemplo, modifique su consulta para:
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;
Esta consulta agrupará por ID de estudiante y calculará el puntaje promedio para cada estudiante. De esta forma, MySQL no informará el error anterior.