CommencezCommencez gratuitement

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

Voir le cours

Instructions de l’exercice

  • Complétez la syntaxe pour déclarer votre CTE.
  • Sélectionnez country_id et l'identifiant du match id à partir de la table match dans votre CTE.
  • Faites un LEFT JOIN du CTE avec la table league en utilisant country_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;
Modifier et exécuter le code