-
카테고리
-
세부 분야
데이터 분석
-
해결 여부
미해결
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
지식공유자 J
지식공유자2022.10.17
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 조건이 있어야 합니다.
답변 1