https://solvesql.com/problems/multiple-medalist/
https://solvesql.com/problems/multiple-medalist/
solvesql.com
✅ 문제
2000년 이후의 메달 수상 기록만 고려했을 때, 메달을 수상한 올림픽 참가 선수 중 2개 이상의 국적으로 메달을 수상한 기록이 있는 선수의 이름을 조회하는 쿼리를 작성해주세요. 조회된 선수의 이름은 오름차순으로 정렬되어 있어야 합니다.
예를 들어, Viktor An 선수는 2006년 토리노에서 열린 동계 올림픽과 2014년 소치에서 열린 동계 올림픽에서 메달을 수상했는데, 2006년에는 대한민국(KOR) 국적으로 메달을 수상했고 2014년에는 러시아(RUS) 국적으로 메달을 수상했습니다.
RECORD라는 테이블에는 역대 올림픽 참가 선수들의 획득 메달정보와 국적정보가있다. 그래서 GROUP BY로 일단 메달을 2개 구한걸 구할려고했고 동시에 국적이 2개이상걸 구해서 메달을 획득 했으면서 이중국적을 찾으려고했다.
그래서 내가 사용한건 GROUP BY 와 HAVING 이다.
select a.name
from (
select count(r.id), r.athlete_id
from records r
inner join games g on r.game_id = g.id and g.year >= 2000
where r.medal is not null
group by r.athlete_id
HAVING count(r.id) > 1 and count(DISTINCT r.team_id) > 1
) as sq
inner join athletes a on sq.athlete_id = a.id
order by a.name
✅ 다른분들의 정답
1.
SELECT a.name
FROM records AS r
INNER JOIN games AS g ON r.game_id = g.id
INNER JOIN athletes AS a ON r.athlete_id = a.id
WHERE g.year >= 2000
AND medal IS NOT NULL
GROUP BY athlete_id
HAVING COUNT(DISTINCT team_id) > 1
ORDER BY a.name ASC
2.
WITH player_medal AS( --2000년 이후 메달을 딴 선수이름
SELECT r.team_id, r.event_id, r.athlete_id, a.name, r.medal
FROM records r
INNER JOIN athletes a ON r.athlete_id=a.id
INNER JOIN games g ON r.game_id=g.id
WHERE 1=1
AND r.medal IS NOT NULL
AND g.year>=2000
)
SELECT DISTINCT name
FROM player_medal
WHERE 1=1
GROUP BY athlete_id
HAVING COUNT(DISTINCT team_id)>=2
ORDER BY name
✏️공부한 내용
- HAVING절에서 국적을 구할때 단순히 COUNT를 하면안되고 만약 단순 COUNT할경우 여러개의 메달을 딴 선수는 여러개의 COUNT가 나오기때문에 DISTINCT를 치고 국적ID가 2개 이상인경우를 가져와야된다.
- 사실 COUNT(R.ID) >1 이부분이 필요가없었다 왜냐하면 처음에 저걸 넣었을때는 메달 2개이상인걸 넣었지만 이미 TEAM_ID>1 이 조건으로 인해서 저테이블에는 2개이상한 2개의국적을 가진사람으로 찾을수있기때문이다.
- WITH절로도 가능해서 어떻게보면 WITH절이 더 생각하기 쉬울수도있을꺼같아서 다음에는 WITH절로 해봐야겠다.
'Algorithm' 카테고리의 다른 글
| [SQL 알고리즘] SolvedSql - 배송 예정일 예측 성공과 실패 (1) | 2025.06.02 |
|---|---|
| [SQL 알고리즘] SolvedSql - 지역별 주문의 특징 (0) | 2025.05.31 |
| [SQL 알고리즘] 프로그래머스 -대장균의 크기에 따라 분류하기 2 (0) | 2024.12.04 |
| [SQL 알고리즘] 프로그래머스 - 입양 시각 구하기 (2) | 2024.12.03 |
| [SQL 알고리즘] 프로그래머스 - 식품분류별 가장 비싼 식품의 정보 조회하기 (2) | 2024.11.27 |