오늘의 인기 글
최근 글
최근 댓글
Today
Total
05-09 00:00
관리 메뉴

우노

[Window Function] LeetCode 180번 “Consecutive Numbers” 풀이 본문

SQL/Window Function

[Window Function] LeetCode 180번 “Consecutive Numbers” 풀이

운호(Noah) 2022. 12. 11. 19:40

문제 링크

풀이

  • 연속으로 세 번 이상 나타나는 모든 숫자를 찾는 SQL 쿼리를 작성하면 되는 문제입니다.

  • Window Function과 LEAD를 사용해 해결할 수 있습니다.

  • 먼저, 아래와 같은 서브쿼리를 작성합니다.

      SELECT num, 
              LEAD(num, 1) over(ORDER BY id) AS next, 
              LEAD(num, 2) over(ORDER BY id) AS nextafter
      FROM Logs
      | num | next | nextafter |
      | --- | ---- | --------- |
      | 1   | 1    | 1         |
      | 1   | 1    | 2         |
      | 1   | 2    | 1         |
      | 2   | 1    | 2         |
      | 1   | 2    | 2         |
      | 2   | 2    |           |
      | 2   |      |           |
  • 서브쿼리 결과값 중, Num, Next, NextAfter가 모두 일치하는 Num을 반환하면 됩니다.

  • 또한, DISTINCT를 사용해 중복된 Num은 제거하면 됩니다.

  • 전체 쿼리는 아래와 같습니다.

전체 쿼리

SELECT DISTINCT sub.num AS ConsecutiveNums
FROM (
SELECT num, 
        LEAD(num, 1) over(ORDER BY id) AS next, 
        LEAD(num, 2) over(ORDER BY id) AS nextafter
FROM Logs
) sub
WHERE sub.num = sub.next and sub.next = sub.nextafter
Comments