Explicación de lo que está pasando :
Estás realizando un GROUP BY
en staff.department
, sin embargo, su SELECT
la lista contiene 2 columnas no agrupadas staff.workerID, staff.name
. En sql estándar, esto es un error de sintaxis, sin embargo, MySql lo permite, por lo que los escritores de consultas deben asegurarse de manejar tales situaciones por sí mismos.
Referencia:http://dev.mysql.com /doc/refman/5.0/en/group-by-handling.html
A partir de MySQL 5.1, la función no estándar se puede desactivar configurando el indicador ONLY_FULL_GROUP_BY en sql_mode:http://dev.mysql.com/doc/refman/5.6/en/sql-mode.html#sqlmode_only_full_group_by
Cómo solucionarlo :
select staff.workerID, staff.name, staff.department, staff.salary
from staff
join (
select staff.department, max(staff.salary) AS biggest
from staff
group by staff.department
) t
on t.department = staff.department and t.biggest = staff.salary
En la consulta interna, obtenga el departamento y su salario más alto usando GROUP BY. Luego, en la consulta externa, combine esos resultados con la tabla principal, lo que le daría los resultados deseados.