학습 자료

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()를 활용하면 각 사용자의 시간에 따른 진도를 손쉽게 비교할 수 있습니다.

Quiz
0 / 1

SQL 윈도 함수에서 PARTITION BY 절의 주된 목적은 무엇인가요?

GROUP BY처럼 여러 행을 하나의 요약 행으로 축약하기 위해서.

특정 기준을 충족하지 않는 행을 걸러내기 위해서.

행들을 독립적으로 처리할 수 있도록 그룹으로 나누기 위해서.

공통 열을 기준으로 여러 테이블을 Join하기 위해서.

학습 자료

AI 튜터

디자인

업로드

수업 노트

즐겨찾기

도움말

코드 에디터

코드 실행
코드 생성

DB 테이블 구조

실행 결과