Полагаю, вы используете MySQL или SQLite, потому что ваш запрос неоднозначен и не разрешен стандартным SQL или большинством брендов СУБД.MySQL и SQLite более разрешительны, поэтому вы должны устранить неоднозначность.
Вот мое обычное исправление:
SELECT e1.ID, e1.salary, e1.department
FROM employee e1
LEFT OUTER JOIN employee e2 ON (e1.department = e2.department
AND e1.salary > e2.salary)
WHERE e2.department IS NULL;
Вот еще одно решение, которое дает тот же результат:
SELECT e1.ID, e1.salary, e1.department
FROM employee e1
JOIN (SELECT e2.department, MIN(e2.salary) AS min_salary
FROM employee e2 GROUP BY e2.department) d
ON (e1.salary = d.min_salary);
Оба из них дают несколько строк на отдел, если в отделе несколько сотрудников с одинаковыми минимальными зарплатами.Вам нужно решить, как решить это дело, потому что это не ясно из описания вашей проблемы.