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_id | log_date | course_name | progress_percent |
---|---|---|---|
1 | 2024-06-01 | SQL Basics | 40 |
1 | 2024-06-02 | SQL Basics | 60 |
1 | 2024-06-03 | SQL Basics | 80 |
1 | 2024-06-04 | SQL Basics | 100 |
각 사용자의 시간별 진도를 확인하고, 이전날과 다음날의 진도와 비교해 보겠습니다.
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_id | log_date | course_name | progress_percent | previous_progress | next_progress |
---|---|---|---|---|---|
1 | 2024-06-01 | SQL Basics | 40 | NULL | 60 |
1 | 2024-06-02 | SQL Basics | 60 | 40 | 80 |
1 | 2024-06-03 | SQL Basics | 80 | 60 | 100 |
1 | 2024-06-04 | SQL Basics | 100 | 80 | NULL |
LEAD()
와 LAG()
를 활용하면 각 사용자의 시간에 따른 진도를 손쉽게 비교할 수 있습니다.
다음 내용이 궁금하다면?
코드프렌즈 PLUS 멤버십 가입 or 강의를 등록해 주세요!