Home [solvesql] 복수 국적 메달 수상한 선수 찾기
Post
Cancel

[solvesql] 복수 국적 메달 수상한 선수 찾기

[solvesql] 복수 국적 메달 수상한 선수 찾기

출처

문제

난이도: 보통, 주제: JOIN, 제출 횟수: 2658번, 정답 횟수: 756번, 정답률: 28.44%, 출제자: 박치완_bell

역대 올림픽 정보 데이터셋은 역대 올림픽 경기와 관련된 데이터가 들어있는 테이블로 이루어져 있습니다.

athletes 테이블에는 역대 올림픽 참가 선수의 이름이 들어 있습니다. events 테이블에는 종목과 경기 이름이 들어 있습니다. games 테이블에는 올림픽 개최 연도, 개최 도시와 시즌 정보가 기록되어 있습니다. records 테이블에는 역대 올림픽 참가 선수들의 신체 정보와 획득한 메달 정보가 기록되어 있습니다. 이 테이블은 다른 테이블과 매핑할 수 있는 ID 정보도 가지고 있습니다. teams 테이블에는 국가 정보가 기록되어 있습니다.

2000년 이후의 메달 수상 기록만 고려했을 때, 메달을 수상한 올림픽 참가 선수 중 2개 이상의 국적으로 메달을 수상한 기록이 있는 선수의 이름을 조회하는 쿼리를 작성해주세요. 조회된 선수의 이름은 오름차순으로 정렬되어 있어야 합니다.

풀이

  • 문제에서 언급했듯이 records 테이블은 다른테이블과 매핑된다고 되어있다.
  • records테이블을 기준으로 left join을 한다.
  • 컬럼은 선수의 이름만 조회하게 한다.
  • 메달 수상 기록 선수만 조회해야 하기 때문에 is not null, null값이 아닌 데이터 조회
  • 2개 이상의 국적인 선수는 distinctcount 하면 된다.
  • 3개의 테이블을 JOIN 하기 때문에 헷갈린다. 필자는 연습장에 그림 그리면서 했다.
  • 테이블의 별칭을 달아 쿼리문을 간결하게 해도 좋다. as
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
select
  a.name
from
  records as r
  left join athletes as a on r.athlete_id = a.id
  left join games as g on r.game_id = g.id
  left join teams as t on r.team_id = t.id
where
  medal is not null
  AND g.year >= 2000
group by
  athlete_id
having
  count(distinct team) >= 2
order by
  a.name

gh-pages

This post is licensed under CC BY 4.0 by the author.

[Programmers] 흉부외과 또는 일반외과 의사 목록 출력하기

[solvesql] 할부는 몇 개월로 해드릴까요