Nettoyer avec des CTE
Au chapitre 2, vous avez produit une liste des pays et du nombre de matchs dans chaque pays où le total des buts dépasse 10. La requête de cet exercice utilisait une sous-requête dans la clause FROM afin de filtrer les matchs avant de les compter dans la requête principale. Voici la requête que vous aviez 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 énumérer une (ou plusieurs) sous-requêtes comme des expressions de table communes (CTE) en les déclarant avant votre requête principale. C'est un excellent moyen d'organiser l'information et de la présenter dans un ordre logique.
Dans cet exercice, réécrivons une requête semblable à l'aide d'un CTE.
Cette activité fait partie du cours
Manipulation de données en SQL
Instructions de l’exercice
- Complétez la syntaxe pour déclarer votre CTE.
- Sélectionnez
country_idet l'identifiant du matchidà partir de la tablematchdans votre CTE. - Faites un
LEFT JOINdu CTE avec la tableleagueen utilisantcountry_id.
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
-- 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;