聚合函数参数为什么不能使用子查询的返回值

关于聚合函数内需要的数据类型的问题

ORACLE数据库的子查询部分的试题

问题:查询各部门平均工资中最高的部门
字段:DEPTNO部门编号 SAL薪资 EMP表名

原题正解是将子查询作为数据源
SELECT DEPTNO FROM EMP
GROUP BY DEPTNO
HAVING AVG(SAL) = (SELECT MAX(A) FROM (SELECT DEPTNO,AVG(SAL) A FROM EMP GROUP BY DEPTNO))

问题解:
将求最高平均薪资的部分按照如下方式来求
SELECT MAX((SELECT AVG(SAL) FROM EMP GROUP BY DEPTNO)) --子查询是一行三列的数据
FROM EMP;
--ERROR:单行子查询结果返回多行

个人想法:
做这个方式的原因是想练习子查询,本身通过MAX(AVG(SAL)) +GROUP BY 也可以求得最高平均薪资(聚合函数的嵌套),但是想尝试一下用子查询,发现居然会报错。
个人理解上认为SELECT的查询结果是一个一列多行的结果,AVG()+GROUP BY好像也是。
为什么就会出现如上错误(单行子查询结果返回多行)

表不能作为聚合查询的元素

img


聚合函数接受的参数是表的字段,而不是某个集合。
就像我图片中那么写是不行的。
你说的问题就是这么个情况

img

你可以这么写