본문 바로가기

Database/Oracle

LEAD와 LAG 분석 함수

[출처] lead 와 lag 함수 (프로그램 개발자) |작성자 coolkkm1

LEAD와 LAG 분석 함수는 동일한 테이블에 있는 다른 행의 값을 참조하기 위한 함수이다.
LAG 분석 함수는 현재 행을 기준으로 이전 값을 참조하는 함수이고, LEAD 분석 함수는 이후의 값을 참조하는 함수이다.
LAG와 LEAD 분석 함수에서 지정하는 인수는 현재 행을 기준으로 몇 번째 행을 참조할 것인지를 지정하며, 음수는 사용할 수 없다.
실무 데이터베이스에서 LAG와 LEAD 분석 함수는 일별 매출 추이 등과 같이 연속적인 데이터 값을 분석할 때 유용하게 사용할 수 있다.


【형식】
LEAD | LAG ( value_expression1 [,offset] [,default] )
     OVER (
        [ PARTITION BY ] [,...]
        ORDER BY  [collate cluase] [ASC | DESC]
        [NULLS FIRST | NULLS LAST]
     )


이 함수는 analytic 함수로서, self join하지 않고 하나의 테이블에서 동시에 한 행(row) 이상을 접근할 수 있도록 한다.
【예제】
SQL> select name,salary,LAG(salary,1,0)    
  2   OVER (ORDER BY salary) FROM employees;

NAME           SALARY LAG(SALARY,1,0)OVER(ORDERBYSALARY)
---------- ---------- ----------------------------------
jijoe             220                                  0
Joe               240                                220
Cho               250                                240
kim               250                                250

SQL> select * from employees;

        ID    DEPT_NO NAME           SALARY      BONUS
---------- ---------- ---------- ---------- ----------
      1101         10 Cho               250        125
      1102         20 Joe               240        100
      1103         10 kim               250        100
      1104         20 jijoe             220        100

SQL>
다음 예는 deptno=10에 대해 임의의 사용자의 sal 컬럼을 기준으로 한행 다음값과 이전 값을 출력
SQL> SELECT ename, sal,
  2     LEAD(sal,1) OVER (ORDER BY sal) AS next_sal,
  3     LAG(sal,1) OVER (ORDER BY sal) AS prev_sal
  4  FROM emp
  5  WHERE deptno=10;
 
ENAME             SAL   NEXT_SAL   PREV_SAL
---------- ---------- ---------- ----------
MILLER           1300       2450
CLARK            2450       5000       1300
KING             5000                  2450
 

 

반응형

'Database > Oracle' 카테고리의 다른 글

DBMS_OUTPUT.PUT_LINE를 이용하여 로그 찍을때  (0) 2009.02.02
오라클 dictionary  (0) 2009.01.17
[펌] in 과 not exists 차이  (0) 2009.01.15
튜닝 시 성능에 미치는 sql..알아둘 것  (0) 2009.01.15
SQL 명령  (0) 2009.01.15