SQL 문제풀이/Leetcode

180. Consecutive Numbers

benlee73 2021. 9. 29. 20:29

https://leetcode.com/problems/consecutive-numbers/

 

Consecutive Numbers - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

Solution

select distinct l.Num as ConsecutiveNums 
from Logs l left join Logs r 
on l.Num = r.Num and r.Id < l.Id and l.Id -r.Id <3 
group by l.Num,l.Id
having sum(l.Id-r.Id)=(0+1+2)
  • num이 같은 것을 모두 left join으로 붙인다.
    • 조건으로는 오른쪽에 붙는 쪽의 id가 더 작아야 한다.
    • 그리고 id의 격차가 3보다 작아야 한다.
  • l.id로 group by를 해도 통과는 한다. 그래서 왜 l.num도 group으로 묶어야 하는진 모르겠다.
  • sum(l-Id-r.Id) = (0+1+2)의 의미는, 연속된 것이 있을 때만 성립한다.
    • l.id - r.id = 0 일 때가 둘이 같을 때
    • l.id - r.id = 1 일 때가 바로 다음에 같은 num이 왔을 때
    • l.id - r.id = 2 일 때가 바로 다다음에 같은 num이 왔을 때