Имеется следующая таблица:
CREATE TABLE `staff` (
`employee_id` int(11) NOT NULL,
`department_id` int(11) NOT NULL,
`salary` int(11) NOT NULL,
)
employee_id - id сотрудника
department_id - id отдела
salary - зарплата
С задачей вывести сотрудников с максимальной зарплатой по каждому отделу я бы справился следующим запросом:
select staff.* from staff inner join (
select max(salary) salary, department_id from staff group by department_id
) max_staff on staff.salary = max_staff.salary and staff.department_id = max_staff.department_id
Но вот что делать, если нужно вывести сотрудников, получающих первые три максимальные зарплаты, по каждому отделу? Т.е. внутри каждого отдела отсортировать их по зарплате, а потом из каждого отдела взять по 3 с максимальной зарплатой.
Сделать нужно одним sql запросом, без использования процедур, курсоров и т.д.