Как вывести среднее значение и количество при соединении двух таблиц?
Есть задача: Путем соединения таблиц 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()в данном случае лишний, т.к. вроде не говорится ничего про округление значений, однако оставил из вашего примера.