• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    미해결

4번문제. COUNT(컬럼을 submission 대신 hacker_id로..

22.05.22 20:21 작성 조회수 176

0

SELECT hac.hacker_id

      ,hac.name      

FROM submissions AS sub

 INNER JOIN challenges AS cha ON sub.challenge_id = cha.challenge_id

 INNER JOIN difficulty AS dif ON cha.difficulty_level = dif.difficulty_level

 INNER JOIN hackers AS hac ON hac.hacker_id = sub.hacker_id

WHERE sub.score = dif.score

GROUP BY sub.hacker_id, hac.name

HAVING COUNT(sub.hacker_id) >1

ORDER BY COUNT(sub.hacker_id) DESC, sub.hacker_id

 

----

안녕하세요. 4번문제 어렵게어렵게 풀었습니다 하아

정답에선 COUNT와 HAVING 의 기준을 submission_id로 풀어주셨는데,

어쩌다 보니 저는 hacker_id 로 짰고, 통과가 됐습니다.

 

hacker_id로 풀었어도 상관없었던건지? 속에 품은 차이가 있는지 궁금합니다.

 

답변 1

답변을 작성해보세요.

1

다린님, 안녕하세요! 문제 푸시느라 고생 많으셨습니다.

이 문제에서 요구하는 바는 '2개 이상의(1개 초과의) 챌린지에서 만점을 받은 해커를 찾는 것'으로, 
HAVING 절에 COUNT(DISTINCT submission_id) 또는 COUNT(DISTINCT challenge_id)을 써 주는 것이 정확히 필터링하는 방법입니다.

GROUP BY hacker_id로 묶어 준 후에 GROUP BY에 쓰인 hacker_id를 다시 사용해 COUNT를 하면
결국 각 hacker_id에 해당하는 row 수를 세는 것과 동일한 명령이 됩니다.
COUNT(*)와 같은 결과가 나오는 거죠.

그런데 이미 GROUP BY를 하기 전에 만점에 해당하는 데이터로만 구성되어 있는 테이블을 만들어 놓았고, 
그 테이블에서 연산을 하면 하나의 hacker_id의 row 수 = 만점 맞은 챌린지 수 가 되기 때문에 
COUNT(hacker_id)를 해도 정답이 된 것입니다.

만약 COUNT(DISTINCT hacker_id)를 썼다면 row 수가 아니라 unique한 hacker_id를 뽑아내게 되는데, 
hacker_id 당 unique한 hacker_id 수는 1개씩이겠죠? 그래서 이 경우는 정답이 될 수 없습니다.