문제
각 행에 전체 합계와 부서별 합계를 함께 출력하는 SQL로 가장 적절한 것은?
① SELECT DEPTNO, SAL, SUM(SAL) OVER() AS 전체합계, SUM(SAL) OVER(PARTITION BY DEPTNO) AS 부서합계 FROM EMP ② SELECT DEPTNO, SAL, SUM(SAL) AS 전체합계, SUM(SAL) AS 부서합계 FROM EMP ③ SELECT DEPTNO, SAL FROM EMP GROUP BY SUM(SAL) ④ SELECT DEPTNO, SAL, COUNT(*) OVER(PARTITION BY SAL) AS 전체합계 FROM EMP
정답
1번
해설
정답: 1. 전체 합계는 SUM(SAL) OVER(), 부서별 합계는 SUM(SAL) OVER(PARTITION BY DEPTNO)로 구할 수 있다.
오답 풀이
- 1번: 분석 함수를 올바르게 사용했다.
- 2번: 일반 집계 함수와 일반 컬럼을 함께 사용하려면 GROUP BY가 필요하며 행별 출력 목적에도 맞지 않는다.
- 3번: GROUP BY 사용 방식이 잘못되었다.
- 4번: COUNT를 사용하고 있어 급여 합계를 구하지 못한다.
보충 개념 윈도우 함수는 행을 유지한 상태에서 집계 결과를 함께 보여줄 수 있다. PARTITION BY는 집계 범위를 그룹 단위로 나누는 역할을 한다.