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 테이블 구조
실행 결과