Wyjaśnienie tego, co się dzieje :
Wykonujesz GROUP BY
na staff.department
, jednak Twój SELECT
lista zawiera 2 niegrupujące kolumny staff.workerID, staff.name
. W standardowym sql jest to błąd składni, jednak MySql na to pozwala, więc twórcy zapytań muszą się upewnić, że sami radzą sobie z takimi sytuacjami.
Odniesienie:http://dev.mysql.com /doc/refman/5.0/en/group-by-handling.html
Począwszy od MySQL 5.1 niestandardową funkcję można wyłączyć, ustawiając flagę ONLY_FULL_GROUP_BY w trybie sql_mode:http://dev.mysql.com/doc/refman/5.6/en/sql-mode.html#sqlmode_only_full_group_by
Jak naprawić :
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
W zapytaniu wewnętrznym pobierz dział i jego najwyższą pensję za pomocą funkcji GROUP BY. Następnie w zewnętrznym zapytaniu połącz te wyniki z główną tabelą, która da ci pożądane wyniki.