Как вывести среднее значение и количество при соединении двух таблиц?

Есть задача: Путем соединения таблиц HR.DEPARTMENTS и HR.EMPLOYEES получить список департа-ментов, указав по каждому департаменту среднюю зарплату сотрудников и количество сотрудников, получающих комиссионную надбавку

Попробовал сделать так:

select e.department_id, round(avg(e.salary)) as avg_salary, count(e.commission_pct) from hr.employees e 
join hr.departments d on (e.department_id = d.department_id) 
having e.commission_pct is not null 
group by e.department_id, e.commission_pct

Выводит почему то не правильно, и только департамент с id = 80, как можно исправить запрос? Вот пример таблиц:

hr.employees:

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

hr.departments:

DEPARTMENT_ID   DEPARTMENT_NAME MANAGER_ID  LOCATION_ID
10              Administration  200           1700

Ответы (1 шт):

Автор решения: SwaD

Попробуйте вот такой запрос:

select e.department_id
  , round(avg(e.salary)) as avg_salary -- Средняя
  , count(e.commission_pct) cnt -- количество с надбавкой
from hr.employees e 
join hr.departments d on e.department_id = d.department_id
group by e.department_id

Если надо выводить название департамента, то вот так

select d.department_name
  , round(avg(e.salary)) as avg_salary -- Средняя
  , count(e.commission_pct) cnt -- количество с надбавкой
from hr.employees e 
join hr.departments d on e.department_id = d.department_id
group by d.department_name
  • скорее всего round() в данном случае лишний, т.к. вроде не говорится ничего про округление значений, однако оставил из вашего примера.
→ Ссылка