Как вывести данные менеджеров, у которых более 5 подчиненных, используя подзапрос?
Есть такая задача:
Используя таблицу HR.EMPLOYEES, отобразить данные о сотрудниках (имя и фамилия, оклад, идентификатор департамента, номер телефона и e-mail), каждый из которых является менеджером для более 5 подчиненных.
Попробовал реализовать вот так, но выходит ошибка:
select first_name, last_name, department_id, phone_number, email from hr.employees
where (select manager_id from hr.employees
where count(manager_id) > 5)
База данных выглядит вот так:
EMPLOYEE_ID FIRST_NAME LAST_NAME EMAIL PHONE_NUMBER HIRE_DATE JOB_ID SALARY COMMISSION_PCT MANAGER_ID DEPARTMENT_ID
100 Steven King SKING 515.123.4567 17-JUN-03 AD_PRES 24000 - - 90
Ответы (2 шт):
Наверное как-то так
select first_name, last_name, department_id, phone_number, email from hr.employees
where employee_id IN (
select manager_id from (select manager_id, COUNT(*) AS cnt from hr.employees) AS t
where t.cnt > 5)
Т.е. сначала мы считаем количество подчиненных для каждого менеджера, а потом выбираем идентификаторы менеджеров у которых подчиненных больше пяти. А уже потом полученные идентиифкаторы вставляем в условие для выборки сотрудников.
Выводим список сотрудников, у которых в подчинении более 5 сотрудников:
Вложенным запросом получаем ID сотрудников, у которых более 5 подчиненных и по этим ID фильтруем.
select
emp.first_name
, emp.last_name
, emp.department_id
, emp.phone_number
, emp.email
from hr.employees emp
where emp.EMPLOYEE_ID in (
select manager_id
from HR.EMPLOYEES
group by manager_id
having count(*) > 5
);