@kirov_dima

Запрос, который выводил бы по 3 сотрудника с наибольшей зарплатой внутри каждого отдела?

Имеется следующая таблица:
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 запросом, без использования процедур, курсоров и т.д.
  • Вопрос задан
  • 5532 просмотра
Пригласить эксперта
Ответы на вопрос 1
Могу ошибаться, но задачу так, возможно, не решить. Будь там фиксированный и заранее известный список отделов, можно было бы пачку SELECT'ов по каждому из них объединить UNION'ом. А в имеющихся условиях либо в совместно используемом языке программирования сначала запрашивать список отделов и на основании его динамически формировать запрос, либо решать средствами СУБД, используя процедуры, курсоры и т.д.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы