Ниже приведена таблица Employee
, в которую также входят данные менеджера. Задача - рассчитать среднюю зарплату под менеджера:
emp_id emp_name salary manager_id
----------- -------- --------- -------------
10 Anil 50000.00 18
11 Vikas 75000.00 16
12 Nisha 40000.00 18
13 Nidhi 60000.00 17
14 Priya 80000.00 18
15 Mohit 45000.00 18
16 Rajesh 90000.00 NULL
17 Raman 55000.00 16
18 Santosh 65000.00 17
Я написал ниже запрос:
SELECT e1.emp_id as manager_id,
e1.emp_name as manager_name,
avg(e2.salary) as employee_avg_salary
FROM employee e1 inner join
employee e2
ON e1.manager_id = e2.emp_id
GROUP BY e1.emp_id, e1.emp_name
ORDER BY e1.emp_id
, что неверно согласно набору решений.
Я думал, что я делаю самосоединение в таблице сотрудников при условии, что manager_id из e1 равен идентификатору сотрудника из e2, сгруппированному по e1.emp_id и e1.emp_name, поскольку левая сторона содержит набор менеджера.
Текущее решение, похоже,
select e2.emp_id as "Manager_Id",
e2.emp_name as "Manager",
avg(a.salary) as "Average_Salary_Under_Manager"
from Employee e1,
Employee e2
where e1.manager_id = e2.emp_id
group by e2.emp_id, e2.emp_name
order by e2.emp_id;
Результирующий набор должен быть
manager_id manager_name employee_avg_salary
----------- ------------ --------------------
16 Rajesh 90000.000000
17 Raman 55000.000000
18 Santosh 65000.000000
(3 rows affected)
Может кто-нибудь, пожалуйста, объясните логику, почему так, я прошу только объяснения.