시작하기무료로 시작하기

CTE 합치기

홈팀과 원정팀 상대를 식별하는 두 개의 하위 쿼리를 만들었으니, 이제 homeaway 하위 쿼리를 공통 테이블 식(CTE)으로 바꿔 쿼리를 재구성해 볼까요. 메인 쿼리에 SELECT DISTINCT가 포함되어 있다는 점을 확인할 수 있어요. DISTINCT로 고유한 경기만 선택하지 않으면, 같은 경기에 대해 중복된 레코드가 반환될 수 있어요.

이제 쿼리를 계속 완성해서 Manchester United가 2014/2015 시즌에 치른 모든 경기를 추출하세요.

이 연습은 강의의 일부입니다

SQL에서의 데이터 조작

강의 보기

연습 안내

  • 메인 쿼리 앞에 homeaway CTE를 선언하세요.
  • 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');
코드 편집 및 실행