子查询只能在包住它的上一层select里使用,不能再其他地方使用,更加不能再select这个子查询的别名。
如果要对一个子查询进行多次select,应该在最前面使用with as 来对这个子查询进行定义。
另外,你这个sql里错误地方太多,完全不符合sql语法逻辑,因此没办法通过小改来进行修正了
select *
from (select row_number() over(order by avg(a.salary)) rn, a.department_id
from employees a
group by a.department_id) aa,
departments b
where aa.department_id = b.department_id
and rn = 1;
如果不使用开窗函数的话,就用下面这个
with t as
(select a.department_id, avg(a.salary) av
from employees a
group by a.department_id)
select b.*
from t, departments b
where av = (select min(av) from t)
and t.department_id = b.department_id
你的ag_dep是上面那一大堆select的别名
而你下面那一堆select跟上面那一堆是并列的关系
你必须要嵌套,外层才能把内层起的别名当做表名来查询
并不是你上面定义了一个变量下面就可以用了那种关系
-=-=-=
记住,只能外层访问内层
你不能内层访问外层,更不能像你这样,先向上一层,再进入另一个子查询里面,访问那里取的一个别名