본문 바로가기
Big Data/Database

LAG & LEAD 함수

by Wikinist 2023. 7. 27.

분석함수인 LAG와 LEAD는 주로 데이터베이스나 SQL에서 사용되는 윈도우 함수(또는 분석 함수)입니다. 이들 함수는 특히 시계열 데이터와 같이 이전 또는 다음 행의 값을 조회하고 싶을 때 유용하게 사용됩니다.

LAG 함수

LAG 함수는 현재 행 이전의 특정 열의 값을 가져옵니다. 함수의 구문은 다음과 같습니다.

LAG(column, offset, default) OVER (PARTITION BY partition_column ORDER BY order_column)

column: 이전 값을 가져올 대상 열을 지정합니다.
offset: 가져올 이전 행의 거리를 나타냅니다. 기본값은 1이며, 1이면 바로 이전 행의 값을 가져옵니다.
default: 만약 이전 값이 없을 경우 반환할 기본값을 지정합니다. 선택적 매개변수입니다.
LAG 함수는 OVER 절과 함께 사용되며, PARTITION BY와 ORDER BY 구문을 사용하여 데이터를 파티션화하고 정렬합니다. 이를 통해 각 파티션 내에서 이전 값을 가져오거나 정렬 순서에 따라 이전 값을 가져올 수 있습니다.

LEAD 함수

LEAD 함수는 현재 행 다음의 특정 열의 값을 가져옵니다. 함수의 구문은 다음과 같습니다:

LEAD(column, offset, default) OVER (PARTITION BY partition_column ORDER BY order_column)

column: 다음 값을 가져올 대상 열을 지정합니다.
offset: 가져올 다음 행의 거리를 나타냅니다. 기본값은 1이며, 1이면 바로 다음 행의 값을 가져옵니다.
default: 만약 다음 값이 없을 경우 반환할 기본값을 지정합니다. 선택적 매개변수입니다.
LEAD 함수도 OVER 절과 함께 사용되며, PARTITION BY와 ORDER BY 구문을 사용하여 데이터를 파티션화하고 정렬합니다.

주로 사용되는 범주

시계열 데이터 분석: 시계열 데이터에서 현재 값의 이전 또는 다음 값을 조회하여 시계열 추세를 파악하거나 패턴을 발견하는 데 사용됩니다.
비교 및 변화 감지: 현재 값과 이전/다음 값을 비교하여 변화를 감지하거나 이벤트 발생을 추적하는 데 사용됩니다.
순위 계산: 정렬된 데이터에서 이전 값이나 다음 값을 활용하여 순위를 계산하는 데 활용할 수 있습니다.
이동 평균 계산: 시계열 데이터의 이동 평균을 계산할 때 이전 또는 다음 값들을 사용하여 계산하는 데 도움이 됩니다.
예를 들어, 주식 가격 데이터에서 LAG나 LEAD 함수를 사용하여 이전 거래일의 가격과 다음 거래일의 가격을 가져와서 변동성을 계산하거나 추세를 파악하는 등의 작업을 할 수 있습니다.

사용 예제

LAG 함수 예제

샘플 데이터:

| 날짜       | 주식가격 |
|------------|---------|
| 2023-07-20 | 1000    |
| 2023-07-21 | 1050    |
| 2023-07-22 | 1100    |
| 2023-07-23 | 1080    |
| 2023-07-24 | 1120    |

SQL 코드:

SELECT
    날짜,
    주식가격,
    LAG(주식가격, 1) OVER (ORDER BY 날짜) AS 이전_주식가격
FROM
    주식데이터;

결과:

| 날짜       | 주식가격 | 이전_주식가격 |
|------------|---------|--------------|
| 2023-07-20 | 1000    | NULL         |
| 2023-07-21 | 1050    | 1000         |
| 2023-07-22 | 1100    | 1050         |
| 2023-07-23 | 1080    | 1100         |
| 2023-07-24 | 1120    | 1080         |

LEAD 함수 예제:

샘플 데이터:

| 날짜       | 주식가격 |
|------------|---------|
| 2023-07-20 | 1000    |
| 2023-07-21 | 1050    |
| 2023-07-22 | 1100    |
| 2023-07-23 | 1080    |
| 2023-07-24 | 1120    |

SQL 코드:

SELECT
    날짜,
    주식가격,
    LEAD(주식가격, 1) OVER (ORDER BY 날짜) AS 다음_주식가격
FROM
    주식데이터;

결과:

| 날짜       | 주식가격 | 다음_주식가격 |
|------------|---------|--------------|
| 2023-07-20 | 1000    | 1050         |
| 2023-07-21 | 1050    | 1100         |
| 2023-07-22 | 1100    | 1080         |
| 2023-07-23 | 1080    | 1120         |
| 2023-07-24 | 1120    | NULL         |

LAG와 LEAD 함수를 함께 사용하여 시계열 데이터의 변동성 계산 예제:

샘플 데이터:

| 날짜       | 주식가격 |
|------------|---------|
| 2023-07-20 | 1000    |
| 2023-07-21 | 1050    |
| 2023-07-22 | 1100    |
| 2023-07-23 | 1080    |
| 2023-07-24 | 1120    |

SQL 코드:

SELECT
    날짜,
    주식가격,
    주식가격 - LAG(주식가격, 1) OVER (ORDER BY 날짜) AS 변동성
FROM
    주식데이터;

결과:

| 날짜       | 주식가격 | 변동성 |
|------------|---------|--------|
| 2023-07-20 | 1000    | NULL   |
| 2023-07-21 | 1050    | 50     |
| 2023-07-22 | 1100    | 50     |
| 2023-07-23 | 1080    | -20    |
| 2023-07-24 | 1120    | 40     |

위의 샘플 코드와 결과를 통해 LAG와 LEAD 함수가 어떻게 사용되며 어떤 결과를 얻을 수 있는지 이해하실 수 있을 것입니다. 실제 데이터에서는 이러한 함수들을 조합하여 다양한 분석과 추이 파악에 활용하게 됩니다.

해당 게시글은 ChatGPT의 도움을 받아 작성되었습니다.

'Big Data > Database' 카테고리의 다른 글

MySQL에 csv 파일 데이터 적재  (0) 2023.08.02
MySQL에서 UnixTime  (0) 2023.07.31
WINDOW 절의 사용  (0) 2023.07.27
분석 함수(Analytic Functions)  (0) 2023.07.27
싱글 쿼터('), 더블 쿼터('')  (0) 2023.07.27