Наводим порядок с помощью CTE
Во второй главе вы составили список стран и количества матчей в каждой стране, в которых было забито более 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.
- Выберите
country_idиidматча из таблицыmatchв вашем CTE. - Соедините CTE с таблицей лиг с помощью
LEFT JOIN, используяcountry_id.
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
-- 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;