본문 바로가기
Database/Oracle

[ORACLE] FIRST_VALUE() 함수 실전 예제 모음 : PARTITION BY와 함께

by Papa Martino V 2025. 6. 1.
728x90

오라클 FIRST_VALUE() 함수 실전 예제 모음: PARTITION BY와 함께
Oracle FIRST_VALUE()

 

 

Oracle SQLFIRST_VALUE() 함수는 분석 함수 중 하나로, 지정된 파티션 또는 전체 데이터셋에서 첫 번째 값을 추출하는 데 사용됩니다. 시간 순서나 정렬 기준에 따라 그룹 내에서 첫 값을 가져와야 할 때 유용하며, 실무에서 빈번하게 활용됩니다.

1. FIRST_VALUE() 함수란?

FIRST_VALUE(expr) OVER (PARTITION BY... ORDER BY...) 형식으로 사용되며, 지정된 정렬 기준에 따라 첫 번째 행의 expr 값을 반환합니다.

  • expr: 반환할 칼럼 값
  • PARTITION BY: 그룹핑 기준
  • ORDER BY: 정렬 기준 (첫 번째를 결정)

2. 기본 사용 예제

SELECT employee_id, department_id, salary,
       FIRST_VALUE(salary) OVER (ORDER BY hire_date) AS first_salary
FROM employees;

직원들의 입사일 기준으로 정렬했을 때, 가장 먼저 입사한 사람의 급여를 반환합니다.

3. PARTITION BY와 함께 사용

SELECT employee_id, department_id, salary,
       FIRST_VALUE(salary) OVER (PARTITION BY department_id ORDER BY hire_date) AS dept_first_salary
FROM employees;

부서별로 가장 먼저 입사한 직원의 급여를 가져옵니다.

4. ROWS BETWEEN으로 범위 제한

SELECT employee_id, department_id, salary,
       FIRST_VALUE(salary) OVER (
           PARTITION BY department_id
           ORDER BY hire_date
           ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
       ) AS first_in_window
FROM employees;

ROWS BETWEEN 절을 통해 윈도 범위를 제한하여 원하는 범위 안에서의 첫 값을 가져올 수 있습니다.

5. 실무 활용 예제

5.1 고객별 첫 거래 금액

SELECT customer_id, transaction_date, amount,
       FIRST_VALUE(amount) OVER (PARTITION BY customer_id ORDER BY transaction_date) AS first_transaction
FROM transactions;

5.2 부서별 첫 급여 수령자

SELECT employee_id, department_id, salary,
       FIRST_VALUE(employee_id) OVER (PARTITION BY department_id ORDER BY hire_date) AS first_employee
FROM employees;

5.3 제품별 첫 출시 가격

SELECT product_id, release_date, price,
       FIRST_VALUE(price) OVER (PARTITION BY product_id ORDER BY release_date) AS first_price
FROM product_history;

6. FIRST_VALUE() vs MIN()

함수 기능 차이점
FIRST_VALUE() 정렬 기준 첫 번째 행의 값 정렬 기준에 따라 결과가 달라짐
MIN() 그룹 내 최소값 단순 수치적 최소값 반환

7. 성능 주의사항

  • ORDER BY 절이 필수이며, 적절한 인덱스 활용이 중요
  • 윈도 범위가 넓을수록 리소스 소모가 커짐
  • PARTITION을 나누지 않으면 전체 데이터셋 기준

8. 실전 시나리오 예제

8.1 그룹 내 첫 구매 상품 확인

SELECT customer_id, purchase_date, product_id,
       FIRST_VALUE(product_id) OVER (PARTITION BY customer_id ORDER BY purchase_date) AS first_product
FROM purchase_history;

8.2 방문자별 첫 방문 페이지 분석

SELECT user_id, visit_time, page_url,
       FIRST_VALUE(page_url) OVER (PARTITION BY user_id ORDER BY visit_time) AS landing_page
FROM web_logs;

9. FAQ - 자주 묻는 질문

Q1. FIRST_VALUE()는 NULL 값을 반환할 수 있나요?

A. 가능합니다. 첫 번째 행이 NULL이면 그대로 반환됩니다.

Q2. 문자, 날짜형 칼럼에도 사용 가능한가요?

A. 예, 모든 데이터 타입에 적용할 수 있습니다.

Q3. LAST_VALUE()와의 차이는?

A. FIRST_VALUE()는 첫 번째 행, LAST_VALUE()는 마지막 행의 값을 반환합니다. 윈도 범위 설정에 따라 결과가 달라질 수 있습니다.

10. 요약

FIRST_VALUE() 함수는 Oracle 분석 함수 중 하나로, 시간 또는 정렬 순서 기준의 첫 값을 빠르게 추출할 수 있어 실무에서 매우 유용합니다. PARTITION BYORDER BY, ROWS BETWEEN 옵션과 함께 사용하면 데이터 그룹별 첫 이벤트나 초기 상태 분석 등에 효과적입니다.

출처

728x90