더북(TheBook)

코드 11-16은 코드 11-15에서 LAG()LEAD() 함수의 매개변수 3개를 모두 입력합니다. LAG(salary, 1, 0)에서 두 번째 매개변수는 현재 로우를 기준으로 몇 번째 앞 로우를 찾을 것인지를 나타냅니다. 1을 명시하므로 바로 앞 로우의 salary 값을 찾습니다. 그리고 세 번째 매개변수로는 0을 명시하므로 반환값이 NULL이면 0을, 그렇지 않으면 salary 값을 읽어 오죠. 따라서 코드 11-15에서 103번 사원은 앞 로우가 없어서 NULL을 반환했지만, 이번에는 0을 반환했습니다. LEAD() 함수도 마찬가지입니다. 107번 사원은 다음 로우가 없어 NULL 대신 0을 반환했습니다.

그럼 매개변수를 한번 바꿔 보죠.

코드 11-17

SELECT employee_id, emp_name, dept_name, salary,
       LAG(salary, 2, 0) OVER (PARTITION BY dept_name
                                   ORDER BY salary DESC
                              ) lag_previous,
       LEAD(salary, 2, 0) OVER (PARTITION BY dept_name
                                    ORDER BY salary DESC
                                ) lead_next
  FROM emp_hierarchy
 ORDER BY 3, 4 DESC;

실행결과

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.