查询员工姓名、工资及平均工资时所有员工均值相同,如何修正?
解决方案
你当前的子查询(SELECT AVG(Salary) FROM Employee)是计算整个Employee表的全局平均工资,所以所有员工记录返回的平均值完全一致。如果要为每位员工计算其对应分组(比如所在部门)的平均工资,可采用以下两种方法:
方法1:使用窗口函数(推荐)
窗口函数可以高效地按指定维度分组计算聚合值,无需额外关联。假设员工表中有部门字段Dno,示例代码如下:
SELECT Fname AS EmployeeFirstName, Lname AS EmployeeLastName, Salary AS Sal, AVG(Salary) OVER (PARTITION BY Dno) AS DepartmentAverageSalary FROM Employee;
PARTITION BY Dno会将员工按部门分组,自动为每个组内的员工计算该部门的平均工资,每条记录将显示对应员工所在部门的平均值。
方法2:使用关联子查询
如果你的数据库版本不支持窗口函数,可通过关联子查询匹配当前员工的分组维度,计算对应分组的平均工资:
SELECT e.Fname AS EmployeeFirstName, e.Lname AS EmployeeLastName, e.Salary AS Sal, (SELECT AVG(Salary) FROM Employee WHERE Dno = e.Dno) AS DepartmentAverageSalary FROM Employee e;
子查询通过Dno = e.Dno关联外部表,仅计算当前员工所在部门的平均工资,确保每条记录返回对应分组的平均值。
注意
如果你的“对应的平均工资”不是按部门,而是其他维度(如职位、入职年份等),只需将PARTITION BY或关联条件中的Dno替换为对应的分组字段即可。
内容的提问来源于stack exchange,提问作者user23487546
相关产品推荐
相关产品推荐

