728x90

Oracle SQL의 LEAD() 함수는 분석 함수(Analytic Function) 중 하나로, 현재 행 기준으로 다음 행의 데이터를 참조할 수 있는 매우 강력한 함수입니다. 시계열 데이터 분석, 증감률 계산, 사용자 행동 분석 등 다양한 실무 영역에서 유용하게 활용됩니다.
1. LEAD() 함수란?
LEAD(expr [, offset [, default]]) OVER (PARTITION BY... ORDER BY...) 형식으로 사용되며, 현재 행 기준으로 n행 뒤의 값을 반환합니다.
- expr: 참조할 칼럼
- offset: 몇 행 뒤 값을 참조할지 (기본값 1)
- default: 다음 행이 없을 때 반환할 기본값
2. 기본 사용 예제
SELECT employee_id, salary,
LEAD(salary) OVER (ORDER BY employee_id) AS next_salary
FROM employees;
직원 ID 기준으로 정렬한 후, 다음 직원의 급여를 조회합니다.
3. PARTITION BY와 함께 사용
부서별로 그룹을 나눈 후 다음 행 참조:
SELECT department_id, employee_id, salary,
LEAD(salary) OVER (PARTITION BY department_id ORDER BY employee_id) AS next_salary
FROM employees;
4. OFFSET과 기본값 지정
두 행 뒤의 값을 참조하고, 데이터가 없을 경우 기본값 0을 반환:
SELECT employee_id, salary,
LEAD(salary, 2, 0) OVER (ORDER BY employee_id) AS salary_2_after
FROM employees;
5. 실무 활용 예제
5.1 월별 매출 대비 다음 달 매출 비교
SELECT month, revenue,
LEAD(revenue) OVER (ORDER BY month) AS next_month_revenue,
revenue - LEAD(revenue) OVER (ORDER BY month) AS revenue_diff
FROM monthly_sales;
5.2 주가의 다음일 종가 참조
SELECT trade_date, close_price,
LEAD(close_price) OVER (ORDER BY trade_date) AS next_close_price
FROM stock_prices;
5.3 고객 방문 간격 계산 (리드 기반)
SELECT customer_id, visit_date,
LEAD(visit_date) OVER (PARTITION BY customer_id ORDER BY visit_date) - visit_date AS days_until_next
FROM visits;
6. LEAD() vs LAG()
| 함수 | 의미 | 예제 |
|---|---|---|
| LAG() | 이전 행 참조 | LAG(salary) OVER (ORDER BY id) |
| LEAD() | 다음 행 참조 | LEAD(salary) OVER (ORDER BY id) |
7. 성능 및 사용 시 주의사항
- ORDER BY가 없으면 순서가 보장되지 않음
- OFFSET이 데이터 범위를 초과하면
NULL또는 기본값 반환 - 많은 OFFSET 또는 PIVOT 연산이 포함되면 성능 저하 유의
8. 고급 활용 예시
8.1 증감률 계산
SELECT month, revenue,
ROUND((LEAD(revenue) OVER (ORDER BY month) - revenue) / revenue * 100, 2) AS growth_rate
FROM monthly_sales;
8.2 이벤트 종료 시점 파악
SELECT user_id, start_time, end_time,
LEAD(start_time) OVER (PARTITION BY user_id ORDER BY start_time) AS next_start
FROM session_log;
9. FAQ - 자주 묻는 질문
Q1. LEAD()는 숫자 외 다른 데이터 타입에도 사용 가능한가요?
A. 네, 문자열, 날짜형, 불리언 등 다양한 데이터 타입에 사용할 수 있습니다.
Q2. 기본값은 필수인가요?
A. 기본값은 선택입니다. 지정하지 않으면 NULL 반환됩니다.
Q3. LAG와 함께 사용할 수 있나요?
A. 네, 증감률, 변화 감지 등에서는 LAG, LEAD를 함께 쓰는 것이 효과적입니다.
10. 요약
LEAD() 함수는 Oracle SQL에서 미래 시점의 데이터를 현재 행과 비교하거나 시간순 정렬된 데이터를 분석할 때 유용하게 사용됩니다. PARTITION BY, ORDER BY와 함께 사용하면 다양한 데이터 패턴 분석이 가능하며, 시계열 비교, 고객 분석, 매출 예측 등 실무에서 자주 활용됩니다.
출처
- Oracle 공식 문서: https://docs.oracle.com/en/database/
- Oracle Live SQL: https://livesql.oracle.com
- Stack Overflow 분석 함수 관련 토론
- SQL Performance Tuning Guide, Oracle Docs
728x90
'Database > Oracle' 카테고리의 다른 글
| [ORACLE] LAST_VALUE() 함수 사용법 및 PARTITION BY 활용 법 (0) | 2025.06.01 |
|---|---|
| [ORACLE] FIRST_VALUE() 함수 실전 예제 모음 : PARTITION BY와 함께 (0) | 2025.06.01 |
| [ORACLE] LAG() 함수 : PARTITION BY와 함께 쓰는 고급 예제 (0) | 2025.06.01 |
| [ORACLE] VARIANCE()로 분산 분석하기 : GROUP BY와 함께 활용하는 방법 (0) | 2025.06.01 |
| [ORACLE] STDDEV() 함수로 표준편차 계산하는 방법 (0) | 2025.06.01 |