Nettoyer avec les CTE
Au chapitre 2, vous avez généré une liste de pays et le nombre de matches dans chaque pays avec un total d’au moins 10 buts. La requête de cet exercice utilise une sous-requête dans l’instruction FROM
afin de filtrer les matchs avant de les compter dans la requête principale. Vous trouverez ci-dessous la requête que vous avez créée :
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;
Vous pouvez répertorier une (ou plusieurs) sous-requêtes en tant qu’expressions de table communes en les déclarant avant votre requête principale, ce qui constitue un excellent outil pour organiser les informations et les classer de manière logique.
Dans cet exercice, nous allons réécrire une requête similaire en utilisant une CTE.
Cet exercice fait partie du cours
Manipulation de données en SQL
Instructions
- Complétez la syntaxe pour déclarer votre CTE.
- Effectuez la correspondance entre
country_id
etid
de la tablematch
dans votre CTE. - Faites une jointure gauche entre la CTE et la table du championnat à l’aide de
country_id
.
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
-- Set up your CTE
___ match_list ___ (
SELECT
country_id,
___
FROM match
WHERE (home_goal + away_goal) >= 10)
-- Select league 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
LEFT JOIN ___ ON l.id = ___
GROUP BY l.name;