not set

오라클 분석함수 LAG() & LEAD() 본문

Database/query

오라클 분석함수 LAG() & LEAD()

다크곰 2009. 6. 15. 10:03

신통방통한 함수다.
조회된 결과 셋 내의 전/후 레코드에 대한 값을 커서를 이동하여 알수 있다.
물론, 오라클에서만 지원한다.
아래의 예제query는 각 반별 평균을 내고, 자신을 기준으로 이전과 다음반의 평균을 조회한것이다.
select classId
, avgPoints
, lag(avgPoints, 1) over (order by classId) prevAvg
, lead(avgPoints, 1) over (order by classId) nextAvg
from (
select '2-1' classId
, 98.3 avgPoints
from dual
union all
select '2-2' classId
, 72.5 avgPoints
from dual
union all
select '2-3' classId
, 58.9 avgPoints
from dual
union all
select '2-4' classId
, 88.2 avgPoints
from dual
)
//-------------조회결과----------------
CLASSID AVGPOINTS PREVAVG NEXTAVG
2-1 98.3 72.5
2-2 72.5 98.3 58.9
2-3 58.9 72.5 88.2
2-4 88.2 58.9

lag(avgPoints, 1) over (order by classId) prevAvg
//커서를 뒤로 이동하여 조회하고자 하는 값 avgPoints, 이동되는 수 1, 정렬기준 classId

lead(avgPoints, 1) over (order by classId) nextAvg
//커서를 앞으로 이동하여 조회하고자 하는 값 avgPoints, 이동되는 수 1, 정렬기준 classId

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

Oracle 특수문자 검색  (0) 2010.07.16
Oracle 숫자 콤마찍기.  (0) 2010.07.13
oracle select update  (0) 2010.02.04
[Oracle] 부정형(NOT IN, <>, NOT EXISTS ...)의 비교  (0) 2009.06.22
ANALYTIC FUNCTION  (0) 2009.06.22