Erklärung für das, was vor sich geht :
Sie führen ein GROUP BY
durch auf staff.department
, jedoch Ihr SELECT
list enthält 2 nicht gruppierende Spalten staff.workerID, staff.name
. In Standard-SQL ist dies ein Syntaxfehler, MySql erlaubt dies jedoch, sodass die Abfrageautoren sicherstellen müssen, dass sie solche Situationen selbst handhaben.
Referenz:http://dev.mysql.com /doc/refman/5.0/en/group-by-handling.html
Beginnend mit MySQL 5.1 kann die Nicht-Standard-Funktion deaktiviert werden, indem das Flag ONLY_FULL_GROUP_BY in sql_mode gesetzt wird:http://dev.mysql.com/doc/refman/5.6/en/sql-mode.html#sqlmode_only_full_group_by
Behebung :
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
Holen Sie in der inneren Abfrage mit GROUP BY die Abteilung und ihr höchstes Gehalt. Verbinden Sie dann in der äußeren Abfrage diese Ergebnisse mit der Haupttabelle, was Ihnen die gewünschten Ergebnisse liefern würde.