• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    미해결

Top Competitors 질문있습니다 ㅠㅠ

22.10.17 02:22 작성 조회수 130

0

select H.hacker_id, h.name

    from hackers as h

    inner join Challenges as c on h.hacker_id = c.hacker_id

    inner join Difficulty as d on c.Difficulty_level = d.Difficulty_level

    inner join submissions as S on C.Challenge_id = S.Challenge_id

    where d.Difficulty_level = c.Difficulty_level

    group by H.hacker_id, h.name

    having count(H.hacker_id) > 1

    order by count(H.hacker_id) desc, h.hacker_id

 

이런식으로 코드를 짰는데 답이 계속 다르게 나오네요 조인 순서에 문제가 있는건지 뭐가 문제인건지를 잘모르겠습니다 ㅠㅠ

선생님과 다르게 코드를 다르게 짠 부분은 저는 hackers 테이블에서 challenges 그다음 difficulty  그다음 submission  으로 조인했다는 점인데 뭐가 문제일까요??

답변 1

답변을 작성해보세요.

1

JOIN 절 :
challenges 테이블의 hacker_id는 challenge를 만든 사람의 id, submissions 테이블의 hacker_id는 challenge의 답안을 제출한 사람의 id로 서로 의미하는 바가 다릅니다.
문제에서 요구하는 바는 답안 제출(submission)자의 id와 이름이므로 hackers 테이블의 hacker_id를 challeges가 아니라 submissions의 hacker_id와의 조인 키로 사용하셔야 합니다.

 

WHERE 절 :
where d.Difficulty_level = c.Difficulty_level 는 조인을 할 때 이미 써 준 조건이므로 다시 쓸 필요가 없으며, 이렇게 조인을 하는 이유는 difficulty 테이블로부터 해당 레벨의 만점(full score)이 몇 점인지를 알아내기 위함입니다.
만점을 다 맞은 사람만 뽑아내야 하므로 WHERE s.score = d.score 조건이 있어야 합니다.