코드 9-13
SELECT AVG(f.salary)
FROM (SELECT a.dept_no, a.dept_name,
COUNT(*) cnt, SUM(c.salary) salary
FROM departments a, dept_emp b, salaries c
WHERE a.dept_no = b.dept_no
AND b.emp_no = c.emp_no
AND SYSDATE() BETWEEN b.from_date AND b.to_date
AND SYSDATE() BETWEEN c.from_date AND c.to_date
GROUP BY a.dept_no, a.dept_name
) f;
실행결과
코드 9-13은 코드 9-12의 쿼리를 파생 테이블로 만들고 메인쿼리의 SELECT 절에서 AVG() 함수의 매개변수로 부서별 총 급여(f.salary)를 넘겨 평균을 구합니다. 결과로 나온 값은 부서별 총 급여에 대한 평균으로, 부서별 총 급여와 이 값을 비교하면 해당 부서의 총 급여가 평균보다 얼마나 높고 낮은지 알 수 있습니다.
이처럼 두 단계 이상에 거쳐 데이터를 조회해야 할 때, 즉 어떤 쿼리를 수행한 결과 집합을 대상으로 다시 조회하거나 집계할 때는 FROM 절에 서브쿼리를 두는 파생 테이블을 사용합니다.