홍동이의 성장일기

[LeetCode] 180. Consecutive Numbers 본문

Tool/SQL 코딩테스트 풀이

[LeetCode] 180. Consecutive Numbers

홍동2 2023. 8. 22. 16:51

 

Consecutive Numbers - LeetCode

Can you solve this real interview question? Consecutive Numbers - Table: Logs +-------------+---------+ | Column Name | Type | +-------------+---------+ | id | int | | num | varchar | +-------------+---------+ In SQL, id is the primary key for this table.

leetcode.com

WITH cte_lead AS(
  SELECT num
        , LEAD(num, 1) OVER () AS next_1
        , LEAD(num, 2) OVER () AS next_2
  FROM logs
)
SELECT DISTINCT num AS ConsecutiveNums
FROM cte_lead
WHERE num = next_1
  AND num = next_2

 

 

💡 문제풀이

 

1. 연속되는 3개의 숫자를 확인하기 위해 LEAD 함수를 이용하여 첫번째 뒤에 있는 숫자, 두번째 뒤에 있는 숫자를 가져와줍니다.

SELECT num
    , LEAD(num, 1) OVER () AS next_1
    , LEAD(num, 2) OVER () AS next_2
FROM logs

 

2. 조건을 걸어주기 위해 1번에서 만든 식을 임시 테이블에 넣어줍니다.

WITH cte_lead AS(
  SELECT num
        , LEAD(num, 1) OVER () AS next_1
        , LEAD(num, 2) OVER () AS next_2
  FROM logs
)

 

3. num과 next_1, next_1과 next_2가 같은 행을 찾기 위해 WHERE절을 사용해줍니다.

WITH cte_lead AS(
  SELECT num
        , LEAD(num, 1) OVER () AS next_1
        , LEAD(num, 2) OVER () AS next_2
  FROM logs
)
SELECT num AS ConsecutiveNums
FROM cte_lead
WHERE num = next_1
  AND next_1 = next_2

 

4. 아래와 같이 중복 결과가 나오는 경우가 발생하기 때문에 DISTINCT로 중복을 제거해줍니다.


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

728x90
Comments