Explicação do que está acontecendo :
Você está realizando um
GROUP BY
em staff.department
, porém seu SELECT
list contém 2 colunas não agrupadas staff.workerID, staff.name
. No sql padrão, isso é um erro de sintaxe, no entanto, o MySql permite que os escritores de consulta tenham que se certificar de que eles mesmos lidem com essas situações. Referência:http://dev.mysql.com /doc/refman/5.0/en/group-by-handling.html
A partir do MySQL 5.1, o recurso não padrão pode ser desabilitado definindo o sinalizador ONLY_FULL_GROUP_BY em sql_mode:http://dev.mysql.com/doc/refman/5.6/en/sql-mode.html#sqlmode_only_full_group_by
Como corrigir :
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
Na consulta interna, busque o departamento e seu salário mais alto usando GROUP BY. Em seguida, na consulta externa, junte esses resultados com a tabela principal que fornecerá os resultados desejados.