谁给他的员工支付最高的平均工资?
Posted
技术标签:
【中文标题】谁给他的员工支付最高的平均工资?【英文标题】:who pays the highest average salary to his employees? 【发布时间】:2016-12-05 14:37:38 【问题描述】:有两张桌子:
Employee
e_id | e_name | m_id | d_id | salary | bonus
1 Andi 3 B 56000 10000
2 Sam 4 A 24000
3 Dave A 89000 23000
4 Mike 3 C 62000 15000
5 Red 1 B 42000
6 Don 1 C 37000
7 Bill 4 C 39000
和
Department
d_id | d_name | mg_id | location
A Dep1 3 US
B Dep2 1 DE
C Dep3 4 RU
部门中的m_id显示管理部门的e_id; mg_id in Employee 显示对应员工的经理的e_id。
我使用以下查询找到经理:
SELECT Employee.e_name
FROM Employee
INNER JOIN Department
ON Employee.e_id = Department.mg_id
AND Employee.d_id = Department.d_id;
问题是如何找出哪个经理向他的员工支付最高的平均工资(+奖金)?
【问题讨论】:
提示:GROUP BY
.
【参考方案1】:
你可以...
SELECT DeptHead.e_name, average(Employee.salary)
FROM Department
INNER JOIN Employee
ON Employee.d_id = Department.d_id
INNER JOIN Employee as DeptHead
ON DeptHead.e_id = Department.mg_id
GROUP BY DeptHead.e_name
ORDER BY average (Employee.salary) DESC
LIMIT 1;
这会将部门两次加入到员工表中,一次是获取部门负责人的信息,另一次是获取员工信息。因此,其中之一必须是“别名”。对于员工信息,您可以对其进行分组并使用聚合函数来获取平均工资。通过降序排序,您首先获得最高的,而通过限制为第一条记录,您只能获得第一个 = 最高的。
【讨论】:
我不是mysql
的专家,但不确定为什么人们建议没有分组的答案会产生什么影响?是不是因为它有效。加上Group by DeptHead.e_name
后结果会不会一样?
@Prdp - 因为人们有时会疏忽 :) 感谢您的提醒。
@Agapwlesu 感谢您的尝试。不幸的是,您的解决方案没有回答我的问题,或者我只是不明白一些事情......我同意在这种情况下 Employee 表应该加入两次,首先只选择经理的名字(其中三个,如果您查看我添加的示例数据 - e_id: 1,3,4),第二次是按 m_id 仅选择员工组并使用聚合函数来获得总工资的平均值 = (salary +奖金)。结果应仅显示员工平均工资最高的一位经理的姓名。
对,所以我的解决方案为您提供经理的姓名和该经理所在部门的平均工资,然后选择平均工资最高的那个。我不确定你为什么认为它不能回答你的问题。结果就像你说的那样,一位经理,其员工的平均工资最高。可能存在轻微的拼写或语法错误,但通常,这应该可以。
@Agapwlesu 您的查询给出以下结果:经理的姓名和包括他自己在内的部门的最高平均工资。我需要向他的员工支付最高平均工资的经理的名字(经理和他的员工可以在不同的部门工作,重要的是Employee表中的m_id)。但是我对您的代码进行了一些更改,它现在完全按照我的需要工作:) 它给出了向其员工支付最高平均工资(+奖金)的经理的姓名,不包括他自己的工资(+奖金)。谢谢! :)以上是关于谁给他的员工支付最高的平均工资?的主要内容,如果未能解决你的问题,请参考以下文章