CTE 합치기
홈팀과 원정팀 상대를 식별하는 두 개의 하위 쿼리를 만들었으니, 이제 home과 away 하위 쿼리를 공통 테이블 식(CTE)으로 바꿔 쿼리를 재구성해 볼까요. 메인 쿼리에 SELECT DISTINCT가 포함되어 있다는 점을 확인할 수 있어요. DISTINCT로 고유한 경기만 선택하지 않으면, 같은 경기에 대해 중복된 레코드가 반환될 수 있어요.
이제 쿼리를 계속 완성해서 Manchester United가 2014/2015 시즌에 치른 모든 경기를 추출하세요.
이 연습은 강의의 일부입니다
SQL에서의 데이터 조작
연습 안내
- 메인 쿼리 앞에
home과awayCTE를 선언하세요. - CTE들을
LEFT JOIN을 사용해 match 테이블과 조인하세요. - CTE에서 필요한 데이터를 메인 쿼리로 선택하세요.
- 메인 쿼리에서 날짜는
match에서, 팀 이름은 CTE에서, 홈/원정 득점은match에서 선택하세요.
실습형 인터랙티브 연습
이 예제를 이 샘플 코드를 완성하여 풀어보세요.
-- Set up the home team CTE
___ ___ ___ (
SELECT m.id, t.team_long_name,
CASE WHEN m.home_goal > m.away_goal THEN 'MU Win'
WHEN m.home_goal < m.away_goal THEN 'MU Loss'
ELSE 'Tie' END AS outcome
FROM match AS m
LEFT JOIN team AS t ON m.hometeam_id = t.team_api_id),
-- Set up the away team CTE
___ ___ (
SELECT m.id, t.team_long_name,
CASE WHEN m.home_goal > m.away_goal THEN 'MU Loss'
WHEN m.home_goal < m.away_goal THEN 'MU Win'
ELSE 'Tie' END AS outcome
FROM match AS m
LEFT JOIN team AS t ON m.awayteam_id = t.team_api_id)
-- Select the date, team names and goals
SELECT DISTINCT
___.___,
___.___ AS home_team_name,
___.___ AS away_team_name,
___.___,
m.away_goal
-- Join the CTEs onto the match table
FROM match AS m
___ JOIN ___ ON m.id = ___
___ JOIN ___ ON m.id = ___
WHERE m.season = '2014/2015'
AND (home.team_long_name = 'Manchester United'
OR away.team_long_name = 'Manchester United');