Прямой путь:
select deptno
from emp
group by deptno
order by avg(salary) desc
fetch first row with ties;
FETCH FIRST
доступен с Oracle 12c.
В Oracle 11g мы могли бы использовать это вместо:
select deptno
from
(
select deptno, avg(salary) as avg_salary, max(avg(salary)) over () as max_avg_salary
from emp
group by deptno
)
where avg_salary = max_avg_salary;
Но вам нужно встроенное представление, другое слово для производной таблицы (подзапрос в предложении from).Это выглядит неуклюже.Один пример без FETCH FIRST
и без оконных функций:
with d as
(
select deptno, avg(salary) as avg_salary
from emp
group by deptno
)
, dmax as
(
select max(avg_salary) as max_avg_salary
from d
)
select d.*
from d
join dmax on dmax.max_avg_salary = d.avg_salary;
Я считаю это очень запутанным и не рекомендую его вообще.Конечно, вы можете сделать то же самое без WITH
.Тогда это еще менее читабельно.