НачатьНачать бесплатно

Наводим порядок с помощью 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;
Редактировать и запускать код