더북(TheBook)

코드 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 절에 서브쿼리를 두는 파생 테이블을 사용합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.