학습 자료
LEAD와 LAG
LEAD()와 LAG()는 윈도 함수로, 현재 행을 기준으로 이전 또는 다음 행의 값을 가져오는 데 사용됩니다.
별도의 JOIN 없이도 인접 행과 비교할 수 있어 시계열 데이터, 변화 추적, 전후 값 비교 등에 유용합니다.
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(column, offset, default_value) OVER (...)
offset: 몇 번째 이전/다음 행을 볼지 지정 (기본값1)default_value: 범위를 벗어날 때 반환할 값 (기본값NULL)
예시: 학습 진도 비교
다음은 학습자의 강의 진도 데이터를 담은 테이블입니다.
| 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;
결과
| 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(): 이전 행과의 차이를 분석할 때 사용- 시계열 데이터, 로그, 매출 추이, 사용자 행동 패턴 분석 등에서 자주 활용
Quiz
0 / 1
SQL 윈도 함수에서 PARTITION BY 절의 주된 목적은 무엇인가요?
GROUP BY처럼 여러 행을 하나의 요약 행으로 축약하기 위해서.
특정 기준을 충족하지 않는 행을 걸러내기 위해서.
행들을 독립적으로 처리할 수 있도록 그룹으로 나누기 위해서.
공통 열을 기준으로 여러 테이블을 Join하기 위해서.
학습 자료
AI 튜터
도움말
코드 에디터
코드 실행
코드 생성
DB 테이블 구조
실행 결과