-
카테고리
-
세부 분야
데이터 분석
-
해결 여부
미해결
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
지식공유자 J
지식공유자2022.06.06
다린님, 안녕하세요! 문제 푸시느라 고생 많으셨습니다.
이 문제에서 요구하는 바는 '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개씩이겠죠? 그래서 이 경우는 정답이 될 수 없습니다.
답변 1