728x90
📚문제
저작권 이슈로 게시 X
📝풀이
# 내 코드 - 오답
SELECT a.name
FROM records r
INNER JOIN athletes a ON r.athlete_id = a.id
INNER JOIN games g ON r.game_id = g.id
INNER JOIN teams t ON r.team_id = t.id
WHERE g.year >= 2000
AND r.medal IS NOT NULL
GROUP BY a.name
HAVING COUNT(DISTINCT t.team) >= 2
ORDER BY a.name
처음에 작성한 코드
근데 제출에서 정답 레코드 개수 1개 차이로 계속 오답이었다
혹시나해서 구글링하여 찾아보니 도움이 많이 된
풀이가 있어서 조금 참고하였다
출처 : [solvesql] 복수 국적 메달 수상한 선수 찾기 (tistory.com)
일단 해답은 그룹화(GROUPING)에 있었다
왼쪽은 선수 이름 (a.name) 으로 그룹핑하였을 때 ( 내가 한 방식 )
오른쪽은 선수 id(a.id) 로 그룹핑하였을 때
name으로 그룹핑 했을때는 'Chen Jing' 선수가 포함되고
id로 그룹핑 했을때는 'Chen Jing'선수가 빠지게 된다
● Chen Jing에 대해 검색
이 사람은 id와 국적이 다른 , 이름만 같은(동명이인의) 사람이다
그래서 이름으로 그룹핑하고 HAVING 조건을 걸면 당연히
Chen Jing을 같은 사람으로 취급해서 값에 포함이 되는 것이고 ( 이중국적으로 취급 )
ID로 그룹핑하고 HAVING 조건을 걸면
id가 다르고 둘은 엄연히 다른 사람이므로 포함이 되지 않는다
왜 값이 다르게 조회가 되는지 헷갈렸는데
이렇게 직접 눈으로 보고 이해하고 넘어가니 개운하다..!
+ 최종 코드
SELECT a.name
FROM records r
INNER JOIN athletes a ON r.athlete_id = a.id
INNER JOIN games g ON r.game_id = g.id
INNER JOIN teams t ON r.team_id = t.id
WHERE g.year >= 2000
AND r.medal IS NOT NULL
GROUP BY a.id
HAVING COUNT(DISTINCT t.team) >= 2
ORDER BY a.name
728x90
'데이터리안' 카테고리의 다른 글
solvesql / 연습문제 - 난이도5 / 폐쇄할 따릉이 정류소 찾기1 (1) | 2023.11.21 |
---|