해결된 질문
작성
·
206
1
실업무에서 연속된 숫자를 찾을 때 다음과 같은 방법을 이용하는데, 다중 셀프 조인과 비교했을 때 어떤 방식이 좀 더 효율적인지 궁금합니다.
(쿼리문이 좀 엉망으로 복붙되는 듯합니다)
select
ConsecutiveNums = Num
from
(
select
rk = rank () over (partition by Num order by Id)
, conse = rank () over (partition by Num order by Id) + (100 - Id)
, *
from Logs
) as a
group by Num, conse
having count(*) >= 3
답변 4
1
LeetCode 에서 왼쪽 상단에 탭을 보시면 Description 이 첫 번째 탭이고 네 번째에 Submissions 가 있는데요. 여기에서 제출한 답의 처리 속도를 보여줍니다. 제가 했을 때에는 강의의 솔루션이 약간 속도가 더 빠르게 나오네요.
하지만 이건 테이블 설계가 어떻게 되어있는지, 어떤 DBMS를 사용하는지에 따라서 달라질 수 있는 문제인 것 같습니다.
이외에, 문제에서는 3번 연속된 숫자를 찾으라고 했지만 만약 100번 연속되는 숫자를 찾아야 한다거나 1000번 연속된 무언가를 찾아야 할 때에는 승규님이 올려주신 방법이 더 간결하고 직관적이라고 생각됩니다. 속도 면에서도 100번, 1000번 셀프조인을 하는 것보다 훨씬 좋을 것 같고요.
속도 차이는 이렇게 상황에 따라서 달라질 수 있으니, 속도가 중요한 테스크를 수행하신다면 개발 환경과 동일한 조건에서 비교 테스트를 해보시는게 좋을 것 같습니다.
좋은 풀이 감사합니다.
0
0
0
쿼리에 표시된 컬럼들의 정보를 알 수 있어야 쿼리 해석을 할 수 있을 것 같은데요.
혹시 쿼리에 표시된 Num, Id, Logs 에 어떤 값들이 들어가 있는지 대략 설명 해 주실 수 있을까요?