SQLDSQL 활용윈도우 함수난이도 1MCQ

SQLD 윈도우 함수 기출문제 #244

문제

다음 테이블에서 각 부서별 급여 상위 2명의 순위를 구하려고 할 때, 올바른 SQL은?

EMP 테이블: DEPTNO, ENAME, SAL

① SELECT DEPTNO, ENAME, ROW_NUMBER() OVER(ORDER BY SAL DESC) FROM EMP WHERE ROW_NUMBER() <= 2 ② SELECT DEPTNO, ENAME, RANK() OVER(PARTITION BY DEPTNO ORDER BY SAL DESC) AS RNK FROM EMP WHERE RNK <= 2 ③ SELECT * FROM (SELECT DEPTNO, ENAME, RANK() OVER(PARTITION BY DEPTNO ORDER BY SAL DESC) AS RNK FROM EMP) WHERE RNK <= 2 ④ SELECT DEPTNO, ENAME, DENSE_RANK() OVER(ORDER BY SAL DESC) FROM EMP GROUP BY DEPTNO HAVING COUNT(*) <= 2

정답

3

해설

③ 서브쿼리를 사용하여 윈도우 함수 결과를 먼저 계산한 후 WHERE 조건을 적용해야 합니다. ① PARTITION BY가 없어 부서별 구분이 안 되고 WHERE절에서 윈도우 함수를 직접 사용할 수 없습니다. ② WHERE절에서 윈도우 함수 별칭을 직접 참조할 수 없습니다. ④ GROUP BY와 윈도우 함수를 잘못 조합했고 부서별 상위 2명을 구하는 로직이 아닙니다.

이런 문제 20~50개를 한 번에 풀어보세요

매번 새로 추가되는 모의고사 + 오답 자동 복습 + 회차별 실력 추적. 회원가입 후 무료 이용.

[SQLD] 윈도우 함수 SQL 활용 기출 #244 | sqldpass