【发布时间】:2018-09-03 10:00:17
【问题描述】:
下面是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
根据解决方案集,这是错误的。
我的想法是我在雇员表上进行自联接,条件是来自 e1 的 manager_id 等于来自 e2 的雇员 ID,因此按 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;
结果集应该是
ManagerId ManagerName AverageSalary
-----------------------------------------
16 Rajesh 65000
17 Raman 62500
18 Santosh 53750
(3 rows affected)
有人可以解释一下为什么会这样,我只是要求解释一下。
【问题讨论】:
-
为什么不显示想要的结果集
-
@Ravi 添加了结果集
-
你怎么能得到这个拉曼 55000 的平均值,因为 (65000+60000)/2 是 62500
标签: sql sql-server self-join