Städa upp med CTE:er
I kapitel 2 skapade du en lista över länder och antalet matcher i varje land med fler än 10 mål totalt. Frågan i den övningen använde en underfråga i FROM-satsen för att filtrera matcherna innan de räknades i huvudfrågan. Här är frågan du skapade:
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;
Du kan lista en (eller flera) underfrågor som common table expressions (CTE:er) genom att deklarera dem före huvudfrågan. Det är ett utmärkt sätt att organisera information och presentera den i en logisk ordning.
I den här övningen skriver vi om en liknande fråga med hjälp av en CTE.
Den här övningen är en del av kursen
Datahantering i SQL
Övningsinstruktioner
- Komplettera syntaxen för att deklarera din CTE.
- Välj
country_idoch matchensidfrån tabellenmatchi din CTE. - Använd
LEFT JOINför att koppla ihop CTE:n med ligatabellen viacountry_id.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
-- 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;