인프런 커뮤니티 질문&답변

Jaeyoung님의 프로필 이미지

작성한 질문수

윤재성의 Oracle SQL Database 11g PL/SQL Developer

23강 결과가 하나 이상인 서브쿼리

급여 최저치 문제

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 인턴님의 프로필 이미지

2024. 03. 18. 15:06

안녕하세요, 인프런 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);

이 쿼리는 각 사원의 급여가 그 사원이 속한 부서의 최저 급여보다 높은지를 비교합니다. 만약 선생님 답변에 혼란이 있었다면, 위 쿼리를 참고하여 다시 한번 실행해 보시길 바랍니다.

프로그래밍에 관련된 추가 질문이 있으시면 언제든지 문의해 주세요.

Jaeyoung님의 프로필 이미지

작성한 질문수

질문하기