Spiegazione di cosa sta succedendo :
Stai eseguendo un GROUP BY
su staff.department
, tuttavia il tuo SELECT
list contiene 2 colonne non di raggruppamento staff.workerID, staff.name
. In SQL standard si tratta di un errore di sintassi, tuttavia MySql lo consente in modo che gli autori di query debbano assicurarsi di gestire tali situazioni da soli.
Riferimento:http://dev.mysql.com /doc/refman/5.0/en/group-by-handling.html
A partire da MySQL 5.1 la funzionalità non standard può essere disabilitata impostando il flag ONLY_FULL_GROUP_BY in sql_mode:http://dev.mysql.com/doc/refman/5.6/en/sql-mode.html#sqlmode_only_full_group_by
Come risolvere :
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
Nella query interna, recupera il reparto e il suo stipendio più alto utilizzando GROUP BY. Quindi nella query esterna unisci quei risultati con la tabella principale che ti darebbe i risultati desiderati.