강의

멘토링

로드맵

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

kokodae.ko님의 프로필 이미지
kokodae.ko

작성한 질문수

[2025] SQLD 문제가 어려운 당신을 위한 노랭이 176 문제 풀이

실전 모의고사 3회 해설

실전문제 3회차 18번

작성

·

20

0

부서별 급여가 가장 높은 직원을 조회하는 SQL문 문제에서 보기중에 아래 2개가 동일한것 같은데 1번보기랑 3번보기랑 같은거 같은데 왜 답이 3번이예요? 1번 쿼리에 문제가있나요?

1. SELECT * FROM EMPLOYEE WHERE (DEPT_ID, SALARY) IN (SELECT DEPT_ID, MAX(SALARY) FROM EMPLOYEE GROUP BY DEPT_ID);

 

3.

SELECT * FROM EMPLOYEE E WHERE SALARY = (SELECT MAX(SALARY) FROM EMPLOYEE WHERE DEPT_ID = E.DEPT_ID)

답변 2

0

데이터코드랩님의 프로필 이미지
데이터코드랩
지식공유자

안녕하세요. 질문 주셔서 감사합니다.

내용 살펴봤습니다. 문제의 보기를 작성할 때 실수가 있었습니다. 18번 문제의 정답은 1, 3번이 모두 해당 하는 것이 맞습니다. 아래 AI 인턴이 남긴 답은 1, 3번 보기의 쿼리가 모두 중복 결과를 리턴하기 때문에 부정확합니다.

 

실수를 알려주셔서 감사드립니다. 참고로 아래에 쿼리 실습을 할 수 있도록 스크립트를 남깁니다. 문제는 업데이트 해서 다시 올려두었습니다. 감사드립니다.

 

-- EMPLOYEE 테이블 생성

CREATE TABLE EMPLOYEE (

EMP_ID INT PRIMARY KEY,

NAME VARCHAR(50),

DEPT_ID INT,

SALARY INT

);

-- 데이터 삽입

INSERT INTO EMPLOYEE (EMP_ID, NAME, DEPT_ID, SALARY) VALUES (100, '김철수', 10, 5000);

INSERT INTO EMPLOYEE (EMP_ID, NAME, DEPT_ID, SALARY) VALUES (200, '이영희', 10, 4000);

INSERT INTO EMPLOYEE (EMP_ID, NAME, DEPT_ID, SALARY) VALUES (300, '박민수', 20, 4500);

INSERT INTO EMPLOYEE (EMP_ID, NAME, DEPT_ID, SALARY) VALUES (400, '최종호', 20, 5500);

-- 테이블 전체 확인 (선택 사항)

SELECT * FROM EMPLOYEE;

commit;

SELECT * FROM EMPLOYEE

WHERE (DEPT_ID, SALARY) IN (

-- 각 부서별 최대 급여와 부서 ID를 조회

SELECT DEPT_ID, MAX(SALARY)

FROM EMPLOYEE

GROUP BY DEPT_ID

);

SELECT * FROM EMPLOYEE E

WHERE SALARY = (

-- 직원 E의 부서(E.DEPT_ID) 내에서 최대 급여를 조회

SELECT MAX(SALARY)

FROM EMPLOYEE

WHERE DEPT_ID = E.DEPT_ID

);

 

 

0

안녕하세요, 인프런 AI 인턴입니다. kokodae.ko님.

SQL 문제에서 부서별 급여가 가장 높은 직원을 조회하는 쿼리를 작성하면서 1번보기와 3번보기의 쿼리가 유사해 보일 수 있지만, 미묘한 차이점이 있을 수 있습니다. 두 쿼리를 간단히 살펴보면 다음과 같습니다:

  1. 첫 번째 쿼리:

    • SELECT * FROM EMPLOYEE WHERE (DEPT_ID, SALARY) IN (SELECT DEPT_ID, MAX(SALARY) FROM EMPLOYEE GROUP BY DEPT_ID);
    • 이 쿼리는 부서별 최대 급여를 가진 직원들을 조회하기 위해 서브쿼리를 사용합니다. 이 경우 (DEPT_ID, SALARY) 형태로 묶인 값들이 부서별 최대 급여 목록에 있는지 확인하고 있습니다.
  2. 세 번째 쿼리:

    • SELECT * FROM EMPLOYEE E WHERE SALARY = (SELECT MAX(SALARY) FROM EMPLOYEE WHERE DEPT_ID = E.DEPT_ID)
    • 이 쿼리는 각 직원에 대해 해당 부서에서 최대 급여를 가진 직원을 찾는 방식입니다. 직원을 하나씩 조회하면서 동일 부서 내에서 급여가 최대인 경우를 비교합니다.

3번 쿼리가 더 명확히 각 부서별 최대 급여를 가진 직원을 찾는 데 유리할 수 있습니다. 첫 번째 쿼리가 잘못된 것은 아니지만, IN 절을 사용함으로써 결과가 같은 부서의 여러 직원끼리 동일한 급여를 받을 때 중복 결과를 방지하기 어렵다는 점을 떠올릴 수 있습니다. 따라서, 우리는 이러한 관점에서 3번 쿼리가 조금 더 직관적으로 이해되고 실행될 수 있습니다.

비슷한 문제 및 답변에 대한 더 많은 정보를 원한다면, 다음 링크를 참고하세요: 부서별 최대 급여 조회 SQL 질문

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

kokodae.ko님의 프로필 이미지
kokodae.ko

작성한 질문수

질문하기