데이터 분석

180. Consecutive Numbers | Medium 본문

SQL/leetcode

180. Consecutive Numbers | Medium

딱한아이 2025. 1. 24. 16:02
문제

 

Find all numbers that appear at least three times consecutively.

테이블 정보

 

연속 3번 이상 등장하는 num을 조회하는 문제이다.

 

Solution

✔️ 쿼리 1 : 셀프조인을 이용하여 해결

SELECT DISTINCT l1.num AS ConsecutiveNums
FROM Logs l1
JOIN Logs l2 ON l2.id = l1.id + 1
JOIN Logs l3 ON l3.id = l2.id + 1
WHERE l1.num = l2.num
  AND l1.num = l3.num

 

✅ Logs 테이블을 3번 사용하여, id를 기준으로 각각 다음 행과 그다음 행을 조인

✅ 현재 행과 다음 행의 num 값이 동일하고, 현재 행과 다다음 행의 num 값도 동일한 경우를 만족하면 동일한 num 값이 3번 연속 나타났다는 의미

 

✔️ 쿼리 2 : 윈도우 함수를 이용하여 해결

SELECT DISTINCT num AS ConsecutiveNums
FROM (
    SELECT num
         , LAG(num, 1) OVER() AS num_1before
         , LEAD(num, 1) OVER() AS num_1after
    FROM Logs
) consecutive
WHERE num = num_1before
  AND num = num_1after
  
 /*
 SELECT DISTINCT num AS ConsecutiveNums
FROM (
    SELECT *
        , LEAD(num, 1) OVER (ORDER BY id) AS next_num1
        , LEAD(num, 2) OVER (ORDER BY id) AS next_num2
    FROM Logs
) step1
WHERE num = next_num1 AND next_num1 = next_num2
 */

 

✅ LAG, LEAD 함수를 사용하여 각 행의 num 값과 이전 및 다음 행의 num 값을 조회

✅ 현재 행의 num 값이 이전 값과 다음 값 모두 동일한 경우를 만족하면 동일한 num 값이 3번 연속 나타났다는 의미

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

178. Rank Scores | Medium  (0) 2025.02.01
185. Department Top Three Salaries | Hard  (1) 2025.02.01
511. Game Play Analysys Ι | Easy  (0) 2025.01.24
1084. Sales Analysis III | Easy  (0) 2025.01.21
1045. Customers Who Bought All Products | Medium  (2) 2025.01.21