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 함수는 데이터 비교와 분석에 매우 유용합니다.
직접 실행해보면서 익혀보세요! 🚀
'개발 > SQL' 카테고리의 다른 글
데이터 타입과 변환: TO_DATE(), TO_CHAR(), CAST(), CONVERT() 활용 (2) | 2025.03.21 |
---|---|
CASE 문으로 데이터 변환: 동적 값 변환과 그룹핑 (4) | 2025.03.20 |
윈도우 함수(Window Function) 기초: RANK(), DENSE_RANK(), ROW_NUMBER() (2) | 2025.03.18 |
서브쿼리(Subquery) 활용법: EXISTS, IN, ANY, ALL (6) | 2025.03.17 |
JOIN 종류 정리: INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN 비교 (0) | 2025.03.16 |