오라클(Oracle) first_value, last_value 함수 사용 방법

오라클(Oracle) first_value, last_value 함수 사용 방법

오라클에서 group by를 사용하지 않고 처음 값과 마지막 값을 가져올 때 이 함수를 사용하게 되는데요. 이 두 함수는 최대값과 최소값을 가져오는 MAX, MIN 함수와 유사합니다.  하지만 사용 방법이 다르고 사용 형태도 다릅니다.

first_value 함수는 결과값에서 첫 번째 행의 값을 반환합니다.
last_value 함수는 결과값에서 마지막 행의 값을 반환합니다.

이 두 함수의 구문과 사용 하는 방법을 알아보겠습니다.

오라클 first_value, last_value


 

두 함수의 구문입니다. 함수 뒤에 나오는 표현 방법은 동일합니다.

FIRST_VALUE | LAST_VALUE
( expression [ IGNORE NULLS | RESPECT NULLS ] ) OVER
(
[ PARTITION BY expr_list ]
[ ORDER BY order_list frame_clause ]
)

1. IGNORE NULLS
 이 옵션을 사용하면 결과 값 중 null 이 아닌 첫 번째 값을 반환합니다.
 LAST_VALUE인 경우 마지막 값이 NULL이 아닌 값을 반환하게 됩니다.
 모두 NULL인경우에는 NULL을 반환하게 됩니다.

2. RESPECT NULLS
행을 결정할 때 NUL 값을 포함할 것을 정의 합니다. 지정하지 않은 경우 기본으로 NULL이 포함됩니다.

3. PARTITION BY
행을 결정할 때 지정된 행에 대해 그룹화를 합니다. A 에 소속된 1,2,3, B에 소속된 123 등 을 표현할 때 사용합니다.

4. ORDER BY
지정된 행에 대해 정렬합니다.
ASC : 오름차순으로 지장되지 않으면 기본값입니다. 값이 1 ,2, 3 순으로 정렬됩니다.
DESC : 내림차순으로 값이 3, 2, 1 순으로 정렬됩니다.


아래와 같은 테이블이 있습니다.

RESPECT NULLS


 

1. FIRST_VALUE

FIRST_VALUE 함수는 처음 입력한 값을 반환합니다.

SELECT FIRST_VALUE(COL1) OVER( ORDER BY COL2 ASC) AS FIRST_VALUE
          ,A.*
 FROM TEST1 A;

조회를 하면 값이 1로 조회되는 것을 확인할 수 있습니다. 처음 값이 1이기 때문입니다.

FIRST_VALUE


 

ORDER BY 를 COL2로 지정 후 DESC를 하면
첫 번째 값인 7로 반환됩니다. 

ORDER BY


 

여기에 PARTITION BY를 COL2로 지정하면
FIRST_VALUE 값은 COL2이 그룹이 되어 COL2 의 A 그룹중 첫 번째 값인 1
B 그룹 중 첫 번째 값인 4, C 그룹중 첫 번째 값인 7이 반환됩니다.

PARTITION BY를 COL2


 

2. LAST_VALUE
FIRST_VALUE와는 반대로 마지막 입력한 값을 조회합니다.

LAST_VALUE



ORDER BY COL2를 DESC 하면 LAST_VALUE에 마지막 입력된 값이 조회됩니다.


ORDER BY COL2를 DESC

 


 


PARTITION BY를 COL2 컬럼에 지정하면

A그룹의 마지막 값, 그룹의 마지막 값, C그룹의 마지막 값을 반환합니다.

PARTITION BY를 COL2 컬럼에 지정하면


 

GROUP BY 없이 FRIST_VALUE, LAST_VALUE 를 함께 사용할 수 있습니다.

GROUP BY 없이 FRIST_VALUE, LAST_VALUE 를 함께

이상 오라클 first_value, last_value 함수 구조개념과 사용 방법을 알아보았습니다.