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 테이블의 급여액과 파생 테이블에서 구한 최대 급여액이 같은 건을 조회하면 부서별 최대 급여를 받는 사원 번호를 알 수 있습니다.