인프런 커뮤니티 질문&답변

홍승규님의 프로필 이미지
홍승규

작성한 질문수

[백문이불여일타] 데이터 분석을 위한 고급 SQL

리트코드 조인 조건이 특이한 문제 풀이 + 2개 이상 셀프 조인하기

이런 방법은 어떤가요

해결된 질문

작성

·

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

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

홍승규님의 프로필 이미지
홍승규
질문자

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

0

홍승규님의 프로필 이미지
홍승규
질문자

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

0

윤선미님의 프로필 이미지
윤선미
지식공유자

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

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

홍승규님의 프로필 이미지
홍승규

작성한 질문수

질문하기