더북(TheBook)

2 정답

SELECT k.dept_no, a.emp_no, a.salary, k.sal
  FROM salaries a,
      (SELECT b.dept_no, MAX(c.salary) sal
         FROM dept_emp b
        INNER JOIN salaries c
           ON b.emp_no = c.emp_no
        WHERE SYSDATE() BETWEEN c.from_date AND c.to_date
        GROUP BY 1
       ) k
WHERE a.salary = k.sal
ORDER BY 1;

실행결과

해설 부서 소속 사원은 dept_emp에, 급여는 salaries 테이블에 있으므로 이 둘을 조인해 조회합니다. 먼저 급여인 salary 칼럼을 MAX() 함수의 매개변수로 넣고 부서 번호를 GROUP BY 절에 넣으면 부서별로 최대 급여액을 구할 수 있습니다. 이렇게 작성한 쿼리를 파생 테이블로 만든 다음, 메인쿼리에서는 salaries 테이블을 명시해 salaries 테이블의 급여액과 파생 테이블에서 구한 최대 급여액이 같은 건을 조회하면 부서별 최대 급여를 받는 사원 번호를 알 수 있습니다.

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