반응형
SQL에서 LAG는 윈도우 함수(Window Function) 중 하나로, 현재 행 기준으로 이전 행의 값을 가져올 때 사용됩니다. 주로 데이터의 변화, 트렌드, 차이 등을 분석하는 데 유용합니다.
LAG의 기본 구조
LAG(컬럼명, [offset], [default]) OVER (PARTITION BY 분할_컬럼 ORDER BY 정렬_컬럼)
매개변수 설명:
- 컬럼명: 이전 값을 가져올 컬럼.
- offset (선택 사항): 이전 행의 상대적 거리 (기본값: 1).
- 1: 바로 이전 행.
- 2: 두 번째 이전 행.
- default (선택 사항): 이전 행이 없을 경우 반환할 기본값 (기본값: NULL).
- OVER: 윈도우 함수의 작업 범위를 지정.
- PARTITION BY: 데이터를 그룹화하여 각각의 그룹 내에서 연산.
- ORDER BY: 연산을 수행할 순서를 정의.
간단한 예제
예제 테이블: 판매
판매ID 날짜 매출액
1 | 2024-11-20 | 100 |
2 | 2024-11-21 | 200 |
3 | 2024-11-22 | 150 |
4 | 2024-11-23 | 300 |
LAG를 사용해 이전 매출액 가져오기:
SELECT
판매ID,
날짜,
매출액,
LAG(매출액) OVER (ORDER BY 날짜) AS 이전_매출액
FROM 판매;
결과:
판매ID 날짜 매출액 이전_매출액
1 | 2024-11-20 | 100 | NULL |
2 | 2024-11-21 | 200 | 100 |
3 | 2024-11-22 | 150 | 200 |
4 | 2024-11-23 | 300 | 150 |
LAG 활용 사례
1. 매출 변화량 계산
SELECT
판매ID,
날짜,
매출액,
LAG(매출액) OVER (ORDER BY 날짜) AS 이전_매출액,
매출액 - LAG(매출액) OVER (ORDER BY 날짜) AS 매출_변화량
FROM 판매;
판매ID 날짜 매출액 이전_매출액 매출_변화량
1 | 2024-11-20 | 100 | NULL | NULL |
2 | 2024-11-21 | 200 | 100 | 100 |
3 | 2024-11-22 | 150 | 200 | -50 |
4 | 2024-11-23 | 300 | 150 | 150 |
2. 고객 그룹별 이전 구매액 추적
예제 테이블: 구매
고객ID 날짜 구매액
A | 2024-11-20 | 50 |
A | 2024-11-22 | 80 |
B | 2024-11-21 | 30 |
B | 2024-11-23 | 60 |
SELECT
고객ID,
날짜,
구매액,
LAG(구매액) OVER (PARTITION BY 고객ID ORDER BY 날짜) AS 이전_구매액
FROM 구매;
고객ID 날짜 구매액 이전_구매액
A | 2024-11-20 | 50 | NULL |
A | 2024-11-22 | 80 | 50 |
B | 2024-11-21 | 30 | NULL |
B | 2024-11-23 | 60 | 30 |
3. 일정한 간격으로 데이터 가져오기
- 두 번째 이전 값 가져오기:
SELECT
판매ID,
날짜,
매출액,
LAG(매출액, 2) OVER (ORDER BY 날짜) AS 두_번째_이전_매출액
FROM 판매;
판매ID 날짜 매출액 두_번째_이전_매출액
1 | 2024-11-20 | 100 | NULL |
2 | 2024-11-21 | 200 | NULL |
3 | 2024-11-22 | 150 | 100 |
4 | 2024-11-23 | 300 | 200 |
요약
LAG 함수는 이전 행의 데이터를 손쉽게 참조할 수 있어 데이터 간의 관계를 분석하거나 시간의 흐름에 따른 변화를 계산하는 데 유용합니다. 이를 활용하면 매출 트렌드, 고객 행동 패턴, 시간 기반 분석 등 다양한 작업을 효율적으로 처리할 수 있습니다! 🚀
평방
반응형
'🖥️ IT, 컴퓨터 > 🏁 SQL・빅쿼리' 카테고리의 다른 글
[SQL] CTE(Common Table Expressions)란? (0) | 2024.11.24 |
---|---|
[SQL] LEAD 함수란? (0) | 2024.11.24 |
[SQL] 윈도우 함수(Window Function)란? (0) | 2024.11.24 |
[SQL] INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN 차이점 (0) | 2024.11.24 |
[SQL] LIKE란? (0) | 2024.11.24 |
댓글