首页 > 解决方案 > 我收到此错误“错误 #1241 - 操作数应在 Mysql 中包含 1 列”,请解决此问题

问题描述

任务:

显示平均工资低于公司平均工资的部门中平均工资最高的部门名称。[提示:使用嵌套子查询]

我的尝试:

Select Department, avg(Salary) as "Highest Average Salary" 
from Employees 
group by Department 
having avg(Salary) > (
    select Department, avg(Salary) as "Average Salary" 
    from Employees 
    group by Department 
    having avg(Salary) < (select avg(Salary) from Employees));

标签: mysqlsql

解决方案


该错误是因为子查询返回多列,并且可能返回多行。当您将子查询用作表达式时,它必须只返回一列,并且最多返回一行(如果它返回零行,则该值被视为NULL)。您无法AVG(Salary)与多个值进行比较。

子查询可以正确找到平均工资低于全公司平均工资的部门。但是您在主查询中没有正确使用它。

您不应该在WHERE子句中使用它。你应该把它放在另一个子查询中以获得平均值的最大值(练习中的“平均工资是最高的”)。然后,您可以HAVING在主查询的子句中使用它来查找具有该平均工资的所有部门。

SELECT Department
FROM Employees
GROUP BY Department
HAVING AVG(Salary) = (
    SELECT MAX(AvgSalary)
    FROM (
        select avg(Salary) as AvgSalary
        from Employees 
        group by Department 
        having AvgSalary < (select avg(Salary) from Employees)
    )
)

推荐阅读