문제
급여가 각각 1000, 2000, 3000인 세 행이 있는 사원 테이블에 대해 다음 SQL을 실행했을 때, 결과 컬럼에 나타나는 값을 위에서부터 순서대로 나열한 것은?
① 1000, 1000, 1000 ② 1000, 2000, 3000 ③ 3000, 2000, 1000 ④ 3000, 3000, 3000
정답
1번
해설
정답은 ①이다. FIRST_VALUE는 윈도우(정렬된 파티션) 내에서 '첫 번째' 값을 반환한다. ORDER BY 급여(오름차순)로 정렬하면 파티션의 첫 값은 최소값인 1000이며, 이 값이 모든 행에 대해 동일하게 반환된다. 따라서 결과는 1000, 1000, 1000이다.
주의: ORDER BY만 있고 윈도우 프레임을 명시하지 않으면 기본 프레임은 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW다. FIRST_VALUE는 프레임의 시작(UNBOUNDED PRECEDING)을 가리키므로 어느 행에서 보든 첫 값 1000으로 고정된다.
- ②: 급여 원본값을 그대로 나열한 오답(윈도우 함수 미적용 착각).
- ③: 내림차순 정렬로 오해한 경우.
- ④: LAST_VALUE 기본 프레임 결과(현재 행까지의 마지막=자기 자신)와 혼동한 값.
보충: 최소값 고정에 FIRST_VALUE+ORDER BY, 최대값에는 MAX() OVER() 또는 프레임을 확장한 LAST_VALUE를 쓴다.