[Leetcode] Consecutive Numbers
정답
SELECT
DISTINCT t1.num ConsecutiveNums
FROM Logs t1
INNER JOIN Logs t2
ON t1.id + 1 = t2.id
INNER JOIN Logs t3
ON t1.id + 2 = t3.id
WHERE t1.num = t2.num AND t2.num = t3.num;
✅ Point
- 3개의
Logs table
을JOIN
하여 인접한 id행끼리 연결 - num 값이 3개 모두 같은 조합만 선택
DISTINCT
로 중복되는 num 제거 후 출력
다른 풀이
- ROW_NUMBER (Window functions)을 활용하여 인접한 행 따지기
group_num
- num을 기준으로 그룹화 & id를 기준으로 오름차순 정렬하여 행 번호 매기기
- id 의 증가 변화량과 ROW_NUMBER 의 증가 변화량이 같다면 연속적인 행
SELECT DISTINCT num ConsecutiveNums FROM ( SELECT id, num, t1.id - ROW_NUMBER() OVER (PARTITION BY num ORDER BY id) group_num FROM Logs T1 ) Logs GROUP BY group_num, num HAVING COUNT(num) >= 3;