sql Определение максимума в группа и условия на количество элементов в группах - Задачи с собеседований

Forums:

Задача

В некоторой СУБД есть таблица persons, в которой есть поля:

  1. id
  2. name -- имя сотрудника
  3. salary -- его зарплата
  4. department_id --id отдела, в котором работает данный сотрудник.

Напишите SQL запросы:

  1. Который выведет список людей, которые получают максимальную зарплату в своём отделе.
  2. Который выведет список отделов (их id), в которых работают больше чем 5 человек.

Key Words for FKN + antitotal forum (CS VSU):

Подзадача 1, пример решения с помощью подзапроса для SQL запроса, где надо
вывести список людей, которые получают максимальную зарплату в своём отделе:

SELECT * FROM persons 
  WHERE (department_id, salary) IN 
    (SELECT department_id, MAX(salary) 
       FROM persons GROUP BY department_id);

Это решение будет оптимальным или есть вариант без подзапроса ?

Подзадача 2, пример запроса для получения id отделов, в которых работают больше 5 человек:

SELECT department_id FROM persons 
  GROUP BY department_id HAVING COUNT(name) > 5;

name в запросе можно заменить на id