[Oracle] 오라클 LAG, LEAD 함수 사용법 (이전값, 다음값)

오라클에서 이전 행의 값을 찾거나 다음 행의  값을 찾기 위해서는 LAG, LEAD 함수를 사용하면 된다.

 

LAG(expr [,offset] [,default]) OVER([partition_by_clause] order_by_clause)
LEAD(expr [,offset] [,default]) OVER([partition_by_clause] order_by_clause)

 

LAG 함수 : 이전 행의 값을 리턴

LEAD 함수 : 다음 행의 값을 리턴

expr : 대상 컬럼명

offset : 값을 가져올 행의 위치 기본값은 1, 생략가능

default : 값이 없을 경우 기본값, 생략가능

partition_by_clause : 그룹 컬럼명, 생략가능

order_by_clause : 정렬 컬럼명, 필수

 

기본 사용법

SELECT empno
     , ename
     , job
     , sal
     , LAG(empno) OVER(ORDER BY empno)  AS empno_prev
     , LEAD(empno) OVER(ORDER BY empno) AS empno_next
  FROM emp 
 WHERE job IN ('MANAGER', 'ANALYST', 'SALESMAN')

 

현재 행의 중심으로 이전 행의 사번(empno), 다음 행의 사번(empno)를 표시한다.

 

LAG 함수 (이전 값)

SELECT empno
     , ename
     , job
     , sal
     , LAG(empno, 2) OVER(ORDER BY empno) AS empno_prev
  FROM emp 
 WHERE job IN ('MANAGER', 'ANALYST', 'SALESMAN')

 

현재 행의 중심으로 두번째 이전 행의 값을 표시한다.

 

SELECT empno
     , ename
     , job
     , sal
     , LAG(empno, 2, 9999) OVER(ORDER BY empno) AS empno_prev
  FROM emp 
 WHERE job IN ('MANAGER', 'ANALYST', 'SALESMAN')

 

가져올 행의 값이 없을 경우 기본값(9999)을 표시한다.

 

LEAD 함수 (다음 값)

SELECT empno
     , ename
     , job
     , sal
     , LEAD(empno, 2) OVER(ORDER BY empno) AS empno_next
  FROM emp 
 WHERE job IN ('MANAGER', 'ANALYST', 'SALESMAN')

 

현재 행의 중심으로 두번째 다음 행의 값을 표시한다.

 

SELECT empno
     , ename
     , job
     , sal
     , LEAD(empno, 2, 9999) OVER(ORDER BY empno) AS empno_next
  FROM emp 
 WHERE job IN ('MANAGER', 'ANALYST', 'SALESMAN')

 

가져올 행의 값이 없을 경우 기본값(9999)을 표시한다.

 

PARTITION BY 사용 

SELECT empno
     , ename
     , job
     , sal
     , LAG(job) OVER(PARTITION BY job ORDER BY empno) AS empno_prev
  FROM emp 
 WHERE job IN ('MANAGER', 'ANALYST', 'SALESMAN')

 

그룹 컬럼 기준으로 이전 값 또는 다음 값을 표시한다.

 

 

사용 예제

 

 

 

 

 

 

사용_예제_쿼리.txt
0.01MB

 

 

댓글

Designed by JB FACTORY