728x90

Oracle SQL의 FIRST_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 BY와 ORDER BY, ROWS BETWEEN 옵션과 함께 사용하면 데이터 그룹별 첫 이벤트나 초기 상태 분석 등에 효과적입니다.
출처
- Oracle 공식 문서: https://docs.oracle.com/en/database/
- Oracle Live SQL 실습 예제: https://livesql.oracle.com
- Stack Overflow SQL 분석 함수 관련 논의
- SQL Reference by Mode Analytics
728x90
'Database > Oracle' 카테고리의 다른 글
| [ORACLE] CUME_DIST()로 누적 백분위 실무 중심 예제로 배우기 (0) | 2025.06.01 |
|---|---|
| [ORACLE] LAST_VALUE() 함수 사용법 및 PARTITION BY 활용 법 (0) | 2025.06.01 |
| [ORACLE] LEAD() 함수와 LAG() 함수 비교 분석 (0) | 2025.06.01 |
| [ORACLE] LAG() 함수 : PARTITION BY와 함께 쓰는 고급 예제 (0) | 2025.06.01 |
| [ORACLE] VARIANCE()로 분산 분석하기 : GROUP BY와 함께 활용하는 방법 (0) | 2025.06.01 |