mysql - 我收到此错误“错误 #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));
解决方案
该错误是因为子查询返回多列,并且可能返回多行。当您将子查询用作表达式时,它必须只返回一列,并且最多返回一行(如果它返回零行,则该值被视为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)
)
)
推荐阅读
- c++ - /clang:-1: Xcode 上的链接器命令失败,退出代码为 1(使用 -v 查看调用)
- machine-learning - 机器学习中的图像预处理
- javascript - 在 React 中使用 JS ES6 承诺的问题 - TypeError: Cannot read property 'then' of undefined
- javascript - 如何在客户端从 mongodb 获取数据?
- c - 使用双下划线时启用编译器警告
- python - 使用 tensorflow 加载 LSUN 数据集
- python - 根据 txt 文件中的搜索结果分配变量值
- sql-server - 不使用动态 SQL 查询表月数据
- grafana - 如何访问通过grafana中的URL传递的变量?
- plone - 根据用户 ID 列表设置内容访问权限