medium, Basic Join
https://www.hackerrank.com/challenges/full-score/problem?isFullScreen=true
네 테이블을 조인하는 문제. 어떤 컬럼으로 조인하느냐에 따라서 결과값이 달라지므로 주의할것.
s.score = d.score을 WHERE절에 필터링해줌으로써 각 챌린지에서 만점을 받은 데이터만 가져올 수 있다.
이런 방식으로 조인할 테이블의 프로세스를 구성한다.
submissions table을 base로 필요한 정보를 담고 있는 테이블들을 join
1) 제출한 문제의 full score 를 알기 위해 difficuly 테이블의 score 정보가 필요하다.
2) difficulty level 정보가 있어야 full score 를 연결할 수 있고, 그 정보는 Challenges 테이블에 있다.
3) hacker의 이름을 출력하기 위해 Hackers 테이블이 필요하다
SELECT h.hacker_id,
h.name
FROM submissions s
JOIN challenges c
ON s.challenge_id = c.challenge_id
JOIN difficulty d
ON c.difficulty_level = d.difficulty_level
JOIN hackers h
ON h.hacker_id = s.hacker_id
WHERE s.score = d.score
-- h.name을 그룹화하는 대신 SELECT절에서 MAX(h.name)으로 표현 가능
GROUP BY h.hacker_id, h.name
-- s.challenge_id 대신 아스타(*) 사용 가능
HAVING COUNT(s.challenge_id) >= 2
ORDER BY COUNT(s.challenge_id) DESC, h.hacker_id