독서하는 개발자's Blog

반응형

이전글, 다음글 LAG, LEAD

게시판 구현을 하다보면 이전글, 다음글 기능을 사용해야하는데, 이를 sql에서 해결 할 수 있다.

 

아래 기본적인 LAG와 LEAD의 형태를 보자.

LAG( expr, offset, default ) OVER (PARTITION BY)
LEAD( expr, offset, default ) OVER (PARTITION BY)

//expr : 이 부분에 쓴 값을 기준으로 이전 로우 값반환

//offset : offset에 지정한 로우가 존재하지 않을 경우, default에 쓴 값을 입력

 

* 참고로 LAG는 분석함수라고 불린다.

 

사용 방법은 예시를 확인하자.

 

* 예시

아래 예시는 employees테이블의 각 영업 사원에 대해 직전 고용 된 직원의 급여를 제공하는 예이다.

SELECT last_name, hire_date, salary, 
   LAG (salary, 1, 0) OVER (ORDER BY hire_date) AS prev_sal 
   FROM 직원 
   job_id = 'PU_CLERK'; 
   
LAST_NAME HIRE_DATE SALARY PREV_SAL 
------------------------- --------- ---------- - -------- 
Khoo 18-MAY-95 3100 0 
Tobias 24-JUL-97 2800 3100 
Baida 24-DEC-97 2900 2800 
Himuro 15-NOV-98 2600 2900 
Colmenares 10-AUG-99 2500 2600

 

두번째줄, hire_date를 오름차순으로 놓고 salary column을 기준으로 바로 이전 로우값(1)을 가져오겠다.

그리고 이전 값을 가져왔는데, 이전 로우 값이 존재하지 않을 경우 0을 집어넣겠다.

=> LAG(salary, 1, 0)

 

그래서 khoo를 기준으로 봤을 때, 이전 로우 값이 존재하지 않기에 PREV_SAL에 0이 들어간 것을 볼 수 있다.

LAG로 값가져오는 순서 Colmenares -> Himuro -> Baida -> Tobias -> Khoo -> ???

 


참고 링크

https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions070.htm

 

LAG

LAG Syntax Description of the illustration lag.gif See Also: "Analytic Functions" for information on syntax, semantics, and restrictions, including valid forms of value_expr Purpose LAG is an analytic function. It provides access to more than one row of a

docs.oracle.com

도움이 되셨으면 공감과 광고 한번 씩 눌러주시면 감사합니다!!

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band