• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    해결됨

이런 방법은 어떤가요

20.08.16 19:43 작성 조회수 150

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를 사용하는지에 따라서 달라질 수 있는 문제인 것 같습니다.

https://dba.stackexchange.com/questions/158374/performance-comparison-between-using-join-and-window-function-to-get-lead-and-la

이외에, 문제에서는 3번 연속된 숫자를 찾으라고 했지만 만약 100번 연속되는 숫자를 찾아야 한다거나 1000번 연속된 무언가를 찾아야 할 때에는 승규님이 올려주신 방법이 더 간결하고 직관적이라고 생각됩니다. 속도 면에서도 100번, 1000번 셀프조인을 하는 것보다 훨씬 좋을 것 같고요.

속도 차이는 이렇게 상황에 따라서 달라질 수 있으니, 속도가 중요한 테스크를 수행하신다면 개발 환경과 동일한 조건에서 비교 테스트를 해보시는게 좋을 것 같습니다.

좋은 풀이 감사합니다.

0

홍승규님의 프로필

홍승규

질문자

2020.08.19

서브미션이 있는 걸 못 봤네요! 긴 답변 감사드립니다. 좋은 강의 잘 들었습니다. 

0

홍승규님의 프로필

홍승규

질문자

2020.08.19

리트코드 Consecutive Numbers  문제였습니다! 

0

쿼리에 표시된 컬럼들의 정보를 알 수 있어야 쿼리 해석을 할 수 있을 것 같은데요.

혹시 쿼리에 표시된 Num, Id, Logs 에 어떤 값들이 들어가 있는지 대략 설명 해 주실 수 있을까요?