데이터 공부/SQL

[MYSQL] LEAG, LAG

민몽 2023. 1. 12. 22:24

안녕하세요 민몽입니다:>

최근 SQL 강의를 들으면서 이전 행, 이후 행이 계속 헷갈려 어떤 걸 써야할 지 어려움을 겪었어요.

그래서 오늘은 SQL의 LEAG, LAG 함수에 대해 정리해보려고 합니다 .

LEAD Function

  • 현재 행 기준 아래 N번째 행 값 가져오는 함수
  • 현재 행과 후속 행과의 차이를 계산할 때 유용함
  • LEAD(<expr>[,offset[,default_value]]) OVER ([PARTITION BY <expr>] ORDER BY <expr>)
    • offset : 지정시 N번째 값 가져옴
    • default_value : N번째 값이 없을 경우 default_value 가져옴
    • PARTITION BY : 지정 시 GROUP 별 행 값 가져옴

LAG Function

  • 현재 행 기준 위 N번째 행 값 가져오는 함수
  • 사용법은 LEAD 함수와 동일

위 내용을 토대로 LEAG,LAG 함수를 활용하는 문제를 풀어보며 다시 한 번 복습해보겠습니다.

 

LeetCode 180번 문제 풀이 Consecutive Numbers
Write an SQL query to find all numbers that appear at least three times consecutively.
= 연속해서 최소 3번 나타나는 숫자 찾기

1. LEAD  이용

SELECT DISTINCT num AS ConsecutiveNums
FROM(
    SELECT num
         , LEAD(num,1) OVER (ORDER BY id) AS next
         , LEAD(num,2) OVER (ORDER BY id) AS after_next
    FROM Logs
) AS next
WHERE num = next
AND next = after_next


2. LAG 이용

SELECT DISTINCT num AS ConsecutiveNums
FROM(
    SELECT num
         , LAG(num,1) OVER (ORDER BY id) AS prev
         , LAG(num,2) OVER (ORDER BY id) AS before_prev
    FROM Logs
) AS prev
WHERE num = prev
AND prev = before_prev






| 본 내용은 데이터리안 'SQL 데이터 분석 캠프 실전반' 을 수강하며 작성한 내용입니다.

🔊 본 포스팅에서 사용되는 테이블의 자료와 출처는 Leetcode임을 밝힙니다. 더 다양한 SQL 문제를 풀어보시려면 Leetcode 사이트를 방문해 보세요!