-- 튜닝전
select deptno, ename, sal, round(avg(sal) over (partition by deptno)) 부서평균
from emp
where sal > ( select avg(sal)
from ( select deptno, ename, sal, round(avg(sal) over (partition by deptno)) 부서평균
from emp
)
)
order by ename;
-- 튜닝후
with emp_avg as
(
select deptno, ename, sal, round(avg(sal) over (partition by deptno)) 부서평균
from emp
)
select *
from emp_avg
where sal > (select avg(sal)
from emp_avg)
order by ename;
-- 튜닝전2
select deptno, ename, sal, round(avg(sal)) 부서평균
from emp
where sal > ( select avg(sal)
from ( select deptno, ename, sal, round(avg(sal)) 부서평균
from emp
group by deptno, ename, sal
)
)
group by deptno, ename, sal
order by ename;
-- 튜닝후2 (부서평균까지 일치)
with emp_avg2 as
(
select deptno, ename, sal, round(avg(sal)) 부서평균
from emp
group by deptno, ename, sal
)
select *
from emp_avg2
where sal > ( select avg(sal)
from emp_avg2
)
order by ename;