如何获取各部门最高薪资中的最小值?MySQL查询问题
解决嵌套查询中“Unknown column 'salary'”的问题
嘿,这个问题我太熟悉了!你报错的核心原因很简单:你的子查询没有给MAX(salary)指定别名,导致外层查询找不到名为salary的列。
咱们一步步理清楚:
- 你的第一个查询是正确的:
SELECT dept_name, MAX(salary) AS max_salary FROM instructor GROUP BY dept_name;这里给聚合后的薪资列起了max_salary别名,临时结果集里有明确的列名。 - 但第二个查询的子查询里,你去掉了
AS max_salary,所以子查询返回的临时表只有dept_name和一个没有名字的聚合列(本质是MAX(salary)的结果,但没有列名)。外层查询写SELECT min(salary)时,数据库自然找不到这个列。
正确的解决写法
只需要给子查询里的MAX(salary)加上别名(和第一个查询保持一致最好),然后外层查询针对这个别名取最小值即可:
SELECT MIN(max_salary) FROM ( -- 子查询必须给聚合列指定别名,让外层能识别 SELECT dept_name, MAX(salary) AS max_salary FROM instructor GROUP BY dept_name ) AS lowest;
补充说明
如果你不想用max_salary这个别名,也可以换成其他名字(比如dept_max_sal),只要外层查询对应上就行:
SELECT MIN(dept_max_sal) FROM ( SELECT dept_name, MAX(salary) AS dept_max_sal FROM instructor GROUP BY dept_name ) AS temp_table;
这样执行后,就会先算出每个部门的最高薪资,再从这些最高薪资里找出最小值,完全符合你的需求。
内容的提问来源于stack exchange,提问作者QueenLewi
相关产品推荐
相关产品推荐

