Opschonen met CTE's
In hoofdstuk 2 heb je een lijst gemaakt van landen en het aantal wedstrijden in elk land met meer dan 10 doelpunten in totaal. De query in die oefening gebruikte een subquery in de FROM-clausule om de wedstrijden te filteren vóórdat ze in de hoofdquery werden geteld. Hieronder staat de query die je hebt gemaakt:
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;
Je kunt een of meer subquery's als common table expressions (CTE's) opnemen door ze vóór je hoofdquery te declareren. Dit is een uitstekende manier om informatie te structureren en in een logische volgorde te plaatsen.
In deze oefening herschrijven we een vergelijkbare query met een CTE.
Deze oefening maakt deel uit van de cursus
Gegevens manipuleren in SQL
Oefeninstructies
- Maak de syntax compleet om je CTE te declareren.
- Selecteer de
country_iden wedstrijd-iduit de tabelmatchin je CTE. - Voer een
LEFT JOINuit van de CTE met de tabelleagueop basis vancountry_id.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
-- 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;