개발/SQL

LEAD & LAG 함수 사용법: 이전/다음 행 참조하기

예니03 2025. 3. 19. 10:54
반응형

SQL에서 LEAD()와 LAG() 함수는 이전 또는 다음 행의 값을 가져올 때 유용한 윈도우 함수(Window Function)입니다.
예를 들어, 직전 월 매출과 현재 월 매출을 비교하거나, 다음 고객 방문 날짜를 확인할 때 활용할 수 있습니다.

이번 글에서는 LEAD()와 LAG() 함수의 개념과 활용법을 쉽게 설명하겠습니다! 😊

 

🔹 1. LEAD & LAG 함수란?

📌 윈도우 함수(Window Function) 중 하나로,
✔ LEAD() → 현재 행 기준 "다음 행"의 값을 가져옴
✔ LAG() → 현재 행 기준 "이전 행"의 값을 가져옴

윈도우 함수 기본 문법

함수명(컬럼명, 이동할 행 수, 기본값) OVER (
    PARTITION BY 그룹기준컬럼
    ORDER BY 정렬기준컬럼
)

✔ 이동할 행 수 → 몇 번째 앞/뒤 값을 가져올지 지정 (기본값: 1)
✔ 기본값 → 찾는 행이 없을 경우 반환할 값 (생략 가능)

 

🔹 2. 예제 테이블 & 데이터 생성

📌 월별 매출 데이터 테이블(sales_data)

month year sales
1월 2024 1000
2월 2024 1500
3월 2024 1200
4월 2024 1700
5월 2024 2000

 

🔹 3. LAG() 함수 – 이전 행 값 가져오기

📌 전월 매출과 비교하여 증감량을 계산해봅시다!

SELECT 
    month, 
    year, 
    sales,
    LAG(sales, 1, 0) OVER (ORDER BY month) AS prev_month_sales,
    sales - LAG(sales, 1, 0) OVER (ORDER BY month) AS sales_difference
FROM sales_data;

🔹 결과 (전월 대비 매출 증감 확인)

month year sales prev_month_sales sales_difference
1월 2024 1000 0 1000
2월 2024 1500 1000 500
3월 2024 1200 1500 -300
4월 2024 1700 1200 500
5월 2024 2000 1700 300

✔ LAG(sales, 1, 0): 이전 월(1칸 뒤) 매출값 가져옴
✔ sales - prev_month_sales: 매출 증감 계산
1월 데이터는 이전 값이 없으므로 기본값 0 사용

 

🔹 4. LEAD() 함수 – 다음 행 값 가져오기

📌 다음 달 예상 매출을 확인해봅시다!

SELECT 
    month, 
    year, 
    sales,
    LEAD(sales, 1, 0) OVER (ORDER BY month) AS next_month_sales
FROM sales_data;

🔹 결과 (다음 달 예상 매출 확인)

month year sales next_month_sales
1월 2024 1000 1500
2월 2024 1500 1200
3월 2024 1200 1700
4월 2024 1700 2000
5월 2024 2000 0

✔ LEAD(sales, 1, 0): 다음 달(1칸 앞으로) 매출값 가져옴
5월 데이터는 다음 달이 없으므로 기본값 0 반환

 

🔹 5. PARTITION BY를 활용한 그룹별 비교

📌 지점별(store_id)로 매출 비교하기

SELECT 
    store_id,
    month, 
    sales,
    LAG(sales, 1, 0) OVER (PARTITION BY store_id ORDER BY month) AS prev_month_sales
FROM store_sales;

✔ PARTITION BY store_id: 지점별(Window)로 나누어서 매출 비교
✔ ORDER BY month: 월별 정렬 후 LAG() 적용

 

🔹 6. LEAD & LAG 함수 차이 정리

함수 가져오는 값 활용 사례
LAG() 이전 행 값 전월 대비 매출 변화, 고객의 이전 구매 기록
LEAD() 다음 행 값 다음 달 예상 매출, 고객의 다음 방문 날짜

과거 데이터와 비교 → LAG()
미래 데이터 예측 → LEAD()

 

🔹 7. 실전 연습 문제

다음 SQL을 작성해보세요!

1️⃣ 전월 대비 매출 증가율(%) 계산하기 (LAG() 활용)
2️⃣ 다음 달과 매출 차이 계산하기 (LEAD() 활용)
3️⃣ 지점별(store_id) 전월 매출 비교 (PARTITION BY 활용)

정답을 댓글로 남겨주세요! 😊✨

👉 LEAD & LAG 함수는 데이터 비교와 분석에 매우 유용합니다.
직접 실행해보면서 익혀보세요! 🚀

반응형