강의

멘토링

커뮤니티

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

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

작성한 질문수

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

실전 모의고사 3회

실전모의고사 2회 42번 문제

작성

·

33

0

보기 1번은 왜 답이 안되는건가요??설명에는 불필요하게 복잡하다고만 나와있는데요.

결과는 1번도 맞는것 같긴한데요. 1번에서 쿼리 오류나 답이 아닌 특정한 경우가 있는건가요?

답변 2

0

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

안녕하세요. KOKODAE.KO 님.

이 문제는 가장 적절한 쿼리를 구하는 문제입니다. 보기 1번도 4번과 같이 동일한 결과를 나타냅니다. 하지만 쿼리 자체가 최적화 되어 있지는 못합니다. 그래서 가장 적절한 쿼리는 4번이 적합하다고 할 수 있습니다. 실제 문제도 이런 식으로 나올 수 있습니다. 동일한 결과를 나타내기 때문에 실전 시험에서도 이슈를 제기할 수도 있습니다만, 가급적이면 가장 적절해 보이는 것으로 선택하는 게 더 좋을 거 같습니다.

 

아래는 실습 쿼리입니다. 참고하십시오. 감사합니다.

 

-- 1. 기존 테이블이 있다면 삭제 (선택 사항)
DROP TABLE EMPLOYEE;

-- 2. EMPLOYEE 테이블 생성
CREATE TABLE EMPLOYEE (
    EMP_ID    VARCHAR2(5) PRIMARY KEY,
    NAME      VARCHAR2(50) NOT NULL,
    DEPT_ID   VARCHAR2(5) NOT NULL,
    SALARY    NUMBER(10) NOT NULL
);


-- 3. 데이터 삽입
INSERT INTO EMPLOYEE (EMP_ID, NAME, DEPT_ID, SALARY) VALUES ('E001', '홍길동', 'D001', 5000);
INSERT INTO EMPLOYEE (EMP_ID, NAME, DEPT_ID, SALARY) VALUES ('E002', '김철수', 'D001', 5500);
INSERT INTO EMPLOYEE (EMP_ID, NAME, DEPT_ID, SALARY) VALUES ('E003', '이영희', 'D002', 4500);
INSERT INTO EMPLOYEE (EMP_ID, NAME, DEPT_ID, SALARY) VALUES ('E004', '박민수', 'D002', 6000);
INSERT INTO EMPLOYEE (EMP_ID, NAME, DEPT_ID, SALARY) VALUES ('E005', '정대현', 'D002', 5000);

-- 4. 변경사항 반영
COMMIT;


-- 4번 쿼리 
WITH DEPT_AVG AS (
    -- 1. 각 부서의 평균 연봉 계산
    SELECT DEPT_ID, AVG(SALARY) AS AVG_SAL
    FROM EMPLOYEE
    GROUP BY DEPT_ID
)
SELECT E.*
FROM EMPLOYEE E
JOIN DEPT_AVG D ON E.DEPT_ID = D.DEPT_ID
WHERE E.SALARY > D.AVG_SAL  -- 2. 부서 평균보다 높은 직원만 필터링
AND E.SALARY = (
    -- 3. 필터링된 전체 직원 중에서 최소 연봉을 찾음
    SELECT MIN(E2.SALARY)
    FROM EMPLOYEE E2
    JOIN DEPT_AVG D2 ON E2.DEPT_ID = D2.DEPT_ID
    WHERE E2.SALARY > D2.AVG_SAL
);


-- 1번 쿼리 
SELECT E.*
FROM EMPLOYEE E
WHERE E.SALARY > (
    SELECT AVG(SALARY)
    FROM EMPLOYEE
    WHERE DEPT_ID = E.DEPT_ID
)
AND E.SALARY = (
    SELECT MIN(SALARY)
    FROM EMPLOYEE E2
    WHERE E2.SALARY > (
        SELECT AVG(SALARY)
        FROM EMPLOYEE
        WHERE DEPT_ID = E.DEPT_ID
    )
);


/*
기대 결과:
EMP_ID | NAME | DEPT_ID | SALARY
-------|------|---------|-------
E002   | 김철수 | D001    | 5500
*/

0

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

SQL 문제에서 제시된 보기 1번이 왜 최적의 답안이 아닌지 궁금해하시네요. 일반적으로 SQL 쿼리를 평가할 때는 성능, 가독성, 유지보수성을 포함한 여러 가지 요소를 고려합니다.

1번 쿼리가 작동은 할 수 있지만, 답안으로는 부적합할 수 있는 주된 이유는 불필요하게 복잡하거나, 성능이 낮거나, 이해하기 어려운 방식으로 작성된 것일 수 있습니다. 이러한 요인은 특히 대량의 데이터를 처리할 때 성능 저하를 초래할 수 있거나, 코드의 유지보수성을 저해할 수 있습니다.

예를 들어, 쿼리 내에서 서브쿼리를 과도하게 사용하거나, 불필요한 조인(join)을 포함한 경우에는 쿼리 응답 시간이 길어질 수 있습니다. 또한, 쿼리가 복잡해질수록 팀원들이나 미래의 자신이 코드의 의도를 쉽게 이해하지 못할 수 있습니다.

이 문제에 대한 구체적인 경우와 이유는 강사님이 제공한 설명서를 참고하거나 직접 쿼리를 실행하면서 분석을 시도해보시면 도움이 될 것입니다.

비슷한 질문에 대한 해답은 다른 학습자 분들도 도움이 될 수 있습니다. 비슷한 문제에 대한 논의가 있었던 실전모의고사 질문 모음 링크를 참고하시기 바랍니다.

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

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

작성한 질문수

질문하기