24.03.16 15:01 작성
·
122
·
수정됨
0
안녕하세요 선생님,
좋은 강의 보여주셔서 감사합니다. 다름이 아니라 23강에서 문제 풀이 도중 이해가 안 가는 부분이 있어서 이렇게 여쭙습니다.
<문제>
-- 각 부서별 급여 최저치보다 더 많이 받는 사원들의 사원번호, 이름, 급여를 가져온다.
<선생님 풀이>
select empno, ename, sal
from emp
where sal > all (select min(sal) from emp group by deptno);
이렇게 진행되면 각 부서별 최저치에서 가장 높은 급여와 비교되는 것이 아닌가 싶어 질문드립니다. 총 인원이 14명인 경우 가장 최저치를 받는 사람들 3명(부서가 3개)을 제외하면 11명이 나와야 할 듯한데 선생님 답에서는 8명만 나와서요...
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
Jaeyoung님, 질문해 주셔서 감사합니다.
선생님의 쿼리는 ‘ALL’ 키워드를 사용하여 각 부서별로 최저 급여보다 더 많이 받는 사원들을 찾는 방식입니다. ‘ALL’은 서브쿼리의 결과로 나온 모든 값을 조건 비교에 사용하므로, 각 부서별 최저 급여 중 하나라도 초과하는 급여를 받는 모든 사원을 가져올 것입니다. 다만, 이 논리는 각각의 부서별로 그 부서의 최저 급여보다 높은 급여를 받는 직원들을 선택합니다. 올바른 결과를 얻기 위해서는 각 부서별로 비교를 달리 해야 합니다.
현재 결과가 예상과 다른 것은 쿼리에 문제가 있을 수 있다는 의미일 수 있습니다. 부서별로 최저 급여보다 높은 급여를 받는 사원의 수를 정확히 확인하려면 서브쿼리에서 각 부서의 최저 급여 데이터를 부서별로 제대로 비교하고 있는지 확인해야 합니다. 예를 들어, 다음과 같은 쿼리는 각 부서별 최저 급여와 직원의 급여를 비교하여 정확한 결과를 가져올 수 있습니다.
SELECT e.empno, e.ename, e.sal
FROM emp e
WHERE e.sal > (SELECT MIN(sal) FROM emp WHERE deptno = e.deptno);
이 쿼리는 각 사원의 급여가 그 사원이 속한 부서의 최저 급여보다 높은지를 비교합니다. 만약 선생님 답변에 혼란이 있었다면, 위 쿼리를 참고하여 다시 한번 실행해 보시길 바랍니다.
프로그래밍에 관련된 추가 질문이 있으시면 언제든지 문의해 주세요.