聚合函数参数的数据类型要求

关于ORACLE数据库
聚合函数参数的数据类型要求

问题是关于一道子查询的试题,如下:

原题:查找平均工资最高的部门
相关字段 :SAL薪资 DEPTNO:部门编号 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:单行子查询返回多个行

报错原因不太理解
因为SELECT AVG(SAL) FROM EMP GROUP BY DEPTNO的返回值是一个【一行三列】的查询结果集,单跑是可以跑出来的
但是再嵌套入MAX()作为参数,就会报错。
个人尝试过聚合函数可以嵌套:【MAX(AVG(SAL)) +GROUP BY DEPTNO】是可以实现的
但是希望尝试用子查询的值作为参数,就会报错。
所以想清楚AVG()的返回值和SELECT的返回值有什么区别

首先,你是不是把行和列的概念搞混了,行是横着的,列是竖着的,像 SELECT AVG(SAL) FROM EMP GROUP BY DEPTNO 这种sql,明显就只有一个列,而你描述它是三个列,因此这里的效果应该是一列三行,即对应单行子查询返回多行的报错。
报错的sql要进行如下改写才行

SELECT MAX((SELECT AVG(SAL) FROM EMP b where a.DEPTNO=b.DEPTNO ))
FROM EMP a;

虽然表名都一样,但select了两次,数据库就把它当两个表使用,需要进行关联

MAX() 函数返回指定列的最大值
这种写法 SELECT MAX((SELECT AVG(SAL) FROM EMP GROUP BY DEPTNO)) FROM EMP 也就是返回EMP表中的(SELECT AVG(SAL) FROM EMP GROUP BY DEPTNO)列,不存在这个列
而SELECT MAX(AVG(SAL)) from EMP GROUP BY DEPTNO 都是对EMP的SAL列求值处理