문제
사원들을 급여 오름차순으로 정렬했을 때, 각 사원의 바로 직전(앞) 행의 급여를 함께 출력하려고 한다. (㉠)에 들어갈 윈도우 함수로 가장 적절한 것은?
① LAG(급여) OVER (ORDER BY 급여) ② LAG(급여) OVER (ORDER BY 급여 DESC) ③ LEAD(급여) OVER (ORDER BY 급여) ④ LEAD(급여) OVER (ORDER BY 급여 DESC)
정답
1번
해설
정답은 ①이다.
LAG(컬럼)는 현재 행을 기준으로 정렬 순서상 '이전(앞) 행'의 값을 가져온다. 급여를 오름차순(ORDER BY 급여)으로 정렬하면 직전 행은 급여가 한 단계 작은 행이 되므로, LAG(급여) OVER (ORDER BY 급여)가 바로 직전급여를 반환한다.
오답 풀이 ② ORDER BY를 DESC로 하면 정렬 방향이 뒤집혀, LAG가 가져오는 '이전 행'이 실제로는 급여가 더 큰 행이 되어 의도한 직전(작은쪽) 값이 아니다. ③ LEAD는 '다음(뒤) 행'의 값을 가져오므로 직전이 아니라 직후 급여가 출력된다. ④ LEAD + DESC는 방향까지 반대라 오름차순 기준의 직전 값과 다르다.
보충: LAG(col, offset, default), LEAD(col, offset, default) 형태로 몇 행 앞/뒤를 볼지와 NULL 대체값을 지정할 수 있다.