본문으로 건너뛰기
실습하기

LEAD와 LAG

LEAD()LAG()는 Join 없이도 현재 행을 기준으로 앞뒤의 다른 행을 조회할 수 있게 해주는 윈도 함수입니다.

  • LEAD()는 다음 행을 바라봅니다.
  • LAG()는 이전 행을 바라봅니다.

사용자 학습 진도 변화 비교나 인접한 데이터 포인트 비교처럼 행 간 비교에 유용합니다.


Syntax

LEAD()LAG()의 기본 구문은 다음과 같습니다.

LEAD와 LAG 구문
SELECT column,
LAG(column) OVER (ORDER BY ...) AS previous_value,
LEAD(column) OVER (ORDER BY ...) AS next_value
FROM table;

기본값과 사용자 지정 오프셋을 제공할 수도 있습니다.

기본값과 사용자 지정 오프셋을 사용하는 LAG 구문
LAG(column, offset, default_value) OVER (...)

예시: 코드프렌즈 학습 진도

다음과 같은 테이블이 있다고 가정해봅시다.

Table: course_progress

user_idlog_datecourse_nameprogress_percent
12024-06-01SQL Basics40
12024-06-02SQL Basics60
12024-06-03SQL Basics80
12024-06-04SQL Basics100

각 사용자의 시간별 진도를 확인하고, 이전날과 다음날의 진도와 비교해 보겠습니다.

LEAD와 LAG 예시
SELECT user_id,
log_date,
course_name,
progress_percent,
LAG(progress_percent) OVER (PARTITION BY user_id ORDER BY log_date) AS previous_progress,
LEAD(progress_percent) OVER (PARTITION BY user_id ORDER BY log_date) AS next_progress
FROM course_progress;

쿼리 결과는 다음과 같습니다.

Result:

user_idlog_datecourse_nameprogress_percentprevious_progressnext_progress
12024-06-01SQL Basics40NULL60
12024-06-02SQL Basics604080
12024-06-03SQL Basics8060100
12024-06-04SQL Basics10080NULL

LEAD()LAG()를 활용하면 각 사용자의 시간에 따른 진도를 손쉽게 비교할 수 있습니다.

다음 내용이 궁금하다면?

코드프렌즈 PLUS 멤버십 가입 or 강의를 등록해 주세요!