CTE로 깔끔하게 정리하기
2장에서는 각 국가에서 총 득점이 10골을 넘는 경기 수를 구해 목록을 만들었습니다. 그 연습 문제의 쿼리는 메인 쿼리에서 집계하기 전에 경기를 필터링하기 위해 FROM 절 안에 서브쿼리를 사용했습니다. 아래는 여러분이 작성한 쿼리입니다:
SELECT
c.name AS country,
COUNT(sub.id) AS matches
FROM country AS c
INNER JOIN (
SELECT country_id, id
FROM match
WHERE (home_goal + away_goal) >= 10) AS sub
ON c.id = sub.country_id
GROUP BY country;
메인 쿼리 앞에 서브쿼리를 미리 선언하면 하나 이상의 서브쿼리를 공통 테이블 식(CTE)으로 나열할 수 있습니다. 이는 정보를 논리적인 순서로 구성하는 데 훌륭한 도구예요.
이번 연습에서는 CTE를 사용해 비슷한 쿼리를 다시 작성해 보겠습니다.
이 연습은 강의의 일부입니다
SQL에서의 데이터 조작
연습 안내
- CTE를 선언하는 구문을 완성하세요.
- CTE에서
match테이블에서country_id와 경기id를 선택하세요. country_id를 사용해 league 테이블과 CTE를LEFT JOIN하세요.
실습형 인터랙티브 연습
이 예제를 이 샘플 코드를 완성하여 풀어보세요.
-- Set up your CTE
___ match_list ___ (
SELECT
country_id,
___
FROM match
WHERE (home_goal + away_goal) >= 10)
-- Select league name and count of matches from the CTE
SELECT
l.name AS league,
COUNT(match_list.id) AS matches
FROM league AS l
-- Join the CTE to the league table using country_id
LEFT JOIN ___ ON l.id = ___
GROUP BY l.name;