더북(TheBook)

⑤ LAG (expr, offset, default_value) , LEAD (expr, offset,

default_value)

LAG와 LEAD 함수는 주어진 그룹과 순서에 따라 다른 로우에 있는 값을 참조할 때 사용되는데 LAG는 선행 로우의 값을, LEAD는 후행 로우의 값을 가져와 반환한다. offset은 선행과 후행 로우의 간격 수를 의미하며 디폴트 값은 1이다. 만약 offset 값을 2로 명시하면 2개의 로우씩 계산해, 각각 전 전 로우와 다음 다음 로우 값을 참조한다. LAG와 LEAD 함수를 통해 참조되는 로우가 없을 때는default_value로 명시한 값이 반환되는데, 이 매개변수의 디폴트 값은 0이다. 30번 부서에 속한 사원들의 입사일자별 급여를 LAG와 LEAD 함수로 산출해 보자.

입력

    SELECT emp_name, hire_date, salary,
           LAG(salary, 1, 0)  OVER (ORDER BY hire_date) AS prev_sal,
           LEAD(salary, 1, 0) OVER (ORDER BY hire_date) AS next_sal
      FROM employees
     WHERE department_id = 30;
그림 7-23 LAG와 LEAD 함수

입사일자별로 정렬을 했는데, Sigal을 기준으로 보면 LAG은 이전 로우인 Alexander의 급여를 반환했고, LEAD는 Shelli의 급여를 반환했다. Den은 이전 로우가 없으므로 LAG는 default_value 값인 0, Karen은 이후 로우가 없으므로 LEAD 함수가 0을 반환했다. 만약 offset을 1이 아닌 2를 주면 두 로우씩 건너뛰어 결과를 반환한다.

입력

    SELECT emp_name, hire_date, salary,
           LAG(salary, 2, 0)  OVER (ORDER BY hire_date) AS prev_sal,
           LEAD(salary, 2, 0) OVER (ORDER BY hire_date) AS next_sal
      FROM employees
     WHERE department_id = 30;
그림 7-24 offset이 2일 때 LAG와 LEAD 함수
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.