오라클(Oracle) first_value, last_value 함수 사용 방법
오라클에서 group by를 사용하지 않고 처음 값과 마지막 값을 가져올 때 이 함수를 사용하게 되는데요. 이 두 함수는 최대값과 최소값을 가져오는 MAX, MIN 함수와 유사합니다. 하지만 사용 방법이 다르고 사용 형태도 다릅니다.
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 순으로 정렬됩니다.
아래와 같은 테이블이 있습니다.
1. FIRST_VALUE
FIRST_VALUE 함수는 처음 입력한 값을 반환합니다.
SELECT FIRST_VALUE(COL1) OVER( ORDER BY COL2 ASC) AS FIRST_VALUE
,A.*
FROM TEST1 A;
조회를 하면 값이 1로 조회되는 것을 확인할 수 있습니다. 처음 값이 1이기 때문입니다.
ORDER BY 를 COL2로 지정 후 DESC를 하면
첫 번째 값인 7로 반환됩니다.
여기에 PARTITION BY를 COL2로 지정하면
FIRST_VALUE 값은 COL2이 그룹이 되어 COL2 의 A 그룹중 첫 번째 값인 1
B 그룹 중 첫 번째 값인 4, C 그룹중 첫 번째 값인 7이 반환됩니다.
2. LAST_VALUE
FIRST_VALUE와는 반대로 마지막 입력한 값을 조회합니다.
ORDER BY COL2를 DESC 하면 LAST_VALUE에 마지막 입력된 값이 조회됩니다.
PARTITION BY를 COL2 컬럼에 지정하면
A그룹의 마지막 값, 그룹의 마지막 값, C그룹의 마지막 값을 반환합니다.
GROUP BY 없이 FRIST_VALUE, LAST_VALUE 를 함께 사용할 수 있습니다.
이상 오라클 first_value, last_value 함수 구조개념과 사용 방법을 알아보았습니다.