코드 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;
실행결과