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

김부각님의 프로필 이미지
김부각

작성한 질문수

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

윈도우 함수 리트코드 문제풀이 (삭제 예정)

lead, lag로 풀이할 시 id 값이 존재하지 않는 경우의 오답

작성

·

208

0

안녕하세요 선생님~

해당 문제를 윈도우함수로 풀었는데, submit을 하니 일부 테스트케이스에서 오답으로 되어 질문드립니다.

 

아래 input에서 id 3이 존재하지 않아, 해당 테이블의 num컬럼을 1,1,null,1,1,2,1 로 정의하고 풀어야 할 것 같습니다.(실제로 expected output에 아무 값도 나오지 않아야 함)

 

강의에 나오는 쿼리로는 id가 빠져있는 경우를 처리하지 않고, 명시적으로 나와있는 데이터의 연속성만 판단하고 있습니다. 아래와 같은 예외케이스를 포괄할 수 있는 쿼리를 어떻게 짜야할지 조언주시면 감사하겠습니다.

제가 작성한 쿼리도 첨부합니다!스크린샷 2024-05-15 오후 9.10.41.png

스크린샷 2024-05-15 오후 9.08.54.png

답변 2

0

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

강의 촬영 당시에는 없었던 테스트케이스인데 최근에 추가된 것으로 보입니다.

존재하는 데이터 순서 기준으로 첫번째 num = 두번째 num = 세번째 num일 때의 num이 무엇인지를 찾는 것이 아니라, id를 기준으로 id가 1일 때의 num = id가 2일 때의 num = id가 3일 때의 num을 찾는 문제가 되었는데요.

이런 내용이 문제에는 명시되지 않아 충분히 헷갈릴 수 있는 것 같습니다.

재검토 후 저희 강의에도 설명 추가해 두겠습니다.

 

이런 요구사항은 lead()가 아닌 join을 사용해 해결할 수 있습니다. 아래 쿼리 참고 바랍니다.

select distinct a.num as ConsecutiveNums
from logs a
    left join logs b on b.id = a.id + 1
    left join logs c on c.id = b.id + 1
where a.num = b.num and b.num = c.num

0

안녕하세요, 인프런 AI 인턴입니다.

님의 문제에 대해 답변 드리겠습니다.

해당 오류는 id 컬럼에서 연속된 값을 기대하는 로직에서 일부 id 값이 누락된 경우에 발생합니다. 여러분이 사용한 LEAD 함수는 다음 행의 값을 가져오는데, 이 때 id 값이 순차적이지 않으면 기대했던 결과를 얻을 수 없습니다.

이를 해결하는 한 가지 방법은, 각 id 값 사이에 누락된 값을 고려해서 순서를 재할당하는 방법입니다. 예를 들어, ROW_NUMBER()를 사용하여 새로운 순서를 할당할 수 있습니다. 그 후에 이 새로운 순서를 기준으로 LEAD 함수를 사용하면 예상대로 작동할 수 있습니다.

하지만 주어진 정보만으로는 정확한 쿼리 작성은 어렵습니다. 일반적인 아이디어를 제공드렸으니, 이를 바탕으로 쿼리를 수정해 보시기 바랍니다.

쿼리 수정에 도움이 될 수 있는 구체적인 예제나 더 상세한 도움이 필요하다면, 질문을 남기시거나 강의의 수강 전/중 문의 기능을 이용해보시는 것도 좋은 방법입니다.

수강 전 문의 게시판 확인하기
수강 중인 강의에 대한 증빙 확인하기
강의별 수강 기한 확인하기
로드맵 기능 확인하기

문제 해결에 조금이나마 도움이 되길 바랍니다. 추가적으로 궁금한 점이 있으시다면 문의해 주세요.

김부각님의 프로필 이미지
김부각

작성한 질문수

질문하기