[Oracle] 오라클 LAG, LEAD 함수 사용법 (이전값, 다음값)
- 데이터베이스/오라클
- 2020. 8. 27.
오라클에서 이전 행의 값을 찾거나 다음 행의 값을 찾기 위해서는 LAG, LEAD 함수를 사용하면 된다.
LAG(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')
그룹 컬럼 기준으로 이전 값 또는 다음 값을 표시한다.
사용 예제