데이터로그😎

[윈도우 함수] Lead, Lag 함수 본문

SQL/MySQL

[윈도우 함수] Lead, Lag 함수

지연v'_'v 2023. 11. 26. 15:03

이전에 발행한 윈도우 함수 관련 글 ↓

Leet Code를 풀고 있는데, 이전 row와 다음 row를 참조해야 하는 문제가 있었다...!이 때는 LEAD, LAG함수를 사용하면 된다.
Lead, Lag 역시 row_number나 rank와 같이 Window function이다.
 
  1. LEAD(): 현재 행 다음의 행에 있는 열 값을 가져옴
  2. LAG(): 현재 행 이전의 행에 있는 열 값을 가져옴
 
 
Stadium이라는 테이블이 아래와 같다고 가정하자.
"+------+------------+-----------+
| id   | visit_date | people    |
+------+------------+-----------+
| 1    | 2017-01-01 | 10        |
| 2    | 2017-01-02 | 109       |
| 3    | 2017-01-03 | 150       |
| 4    | 2017-01-04 | 99        |
| 5    | 2017-01-05 | 145       |
| 6    | 2017-01-06 | 1455      |
| 7    | 2017-01-07 | 199       |
| 8    | 2017-01-09 | 188       |
+------+------------+-----------+
 
만약 Stadium 테이블에서 LEAD, LAG를 적용하면 어떤 결과가 나올까?
SELECT
  id,
  visit_date,
  people,
  LAG(people, 1) OVER (ORDER BY id) AS lag1_people,
  LAG(people, 2) OVER (ORDER BY id) AS lag2_people,
  LEAD(people, 1) OVER (ORDER BY id) AS lead1_people,
  LEAD(people, 2) OVER (ORDER BY id) AS lead2_people
FROM Stadium;

 

다음과 같은 결과가 나오게 된다.

+----+------------+--------+-------------+-------------+--------------+--------------+
| id | visit_date | people | lag1_people | lag2_people | lead1_people | lead2_people |
+----+------------+--------+-------------+-------------+--------------+--------------+
| 1  | 2017-01-01 | 10     | NULL        | NULL        | 109          | 150          |
| 2  | 2017-01-02 | 109    | 10          | NULL        | 150          | 99           |
| 3  | 2017-01-03 | 150    | 109         | 10          | 99           | 145          |
| 4  | 2017-01-04 | 99     | 150         | 109         | 145          | 1455         |
| 5  | 2017-01-05 | 145    | 99          | 150         | 1455         | 199          |
| 6  | 2017-01-06 | 1455   | 145         | 99          | 199          | 188          |
| 7  | 2017-01-07 | 199    | 1455        | 145         | 188          | NULL         |
| 8  | 2017-01-09 | 188    | 199         | 1455        | NULL         | NULL         |
+----+------------+--------+-------------+-------------+--------------+--------------+

 

'SQL > MySQL' 카테고리의 다른 글

[MySQL] 날짜형식 관련 함수  (0) 2023.12.29
[MySQL] REGEXP 함수  (1) 2023.12.20
[윈도우 함수] RANK() OVER()  (0) 2023.11.24
[집계 함수] GROUP BY, GROUPING  (0) 2023.09.08
REPLACE, SUBSTR, LPAD, TRIM  (0) 2023.09.08