CTE 합치기
홈 팀과 원정 팀 상대를 식별하는 두 개의 서브쿼리를 만들었으니, 이제 home과 away 서브쿼리를 공통 테이블 표현식(CTEs) 으로 재구성할 차례입니다. 메인 쿼리에 SELECT DISTINCT 구문이 포함되어 있는 것을 확인할 수 있는데, DISTINCT 경기만 식별하지 않으면 각 경기마다 중복 레코드가 반환될 수 있습니다.
2014/2015 시즌에 맨체스터 유나이티드가 치른 모든 경기를 추출하는 쿼리 작성을 계속하세요.
이 연습은 강의의 일부입니다
SQL 데이터 조작
연습 안내
- 메인 쿼리 전에
home과awayCTE를 선언하세요. LEFT JOIN을 사용해 CTE를 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');