Aan de slagGa gratis aan de slag

De CTE's combineren

Nu je de twee subquery's hebt gemaakt die de thuis- en uitploeg-tegenstanders bepalen, is het tijd om je query te herstructureren met de subquery's home en away als Common Table Expressions (CTE's). Je ziet dat de hoofdquery de term SELECT DISTINCT bevat. Zonder alleen DISTINCT wedstrijden te selecteren, kun je een dubbele record voor elke gespeelde wedstrijd terugkrijgen.

Ga verder met het opbouwen van de query om alle wedstrijden van Manchester United in het seizoen 2014/2015 op te halen.

Deze oefening maakt deel uit van de cursus

Gegevens manipuleren in SQL

Cursus bekijken

Oefeninstructies

  • Declareer de CTE's home en away vóór je hoofdquery.
  • Join je CTE's met de tabel match met een LEFT JOIN.
  • Selecteer de relevante gegevens uit de CTE's in de hoofdquery.
  • Selecteer in de hoofdquery de datum uit match, teamnamen uit de CTE's en de thuis-/uitdoelpunten uit match.

Praktische interactieve oefening

Probeer deze oefening eens door deze voorbeeldcode in te vullen.

-- Set up the home team CTE
___ ___ ___ (
  SELECT m.id, t.team_long_name,
	  CASE WHEN m.home_goal > m.away_goal THEN 'MU Win'
		   WHEN m.home_goal < m.away_goal THEN 'MU Loss' 
  		   ELSE 'Tie' END AS outcome
  FROM match AS m
  LEFT JOIN team AS t ON m.hometeam_id = t.team_api_id),
-- Set up the away team CTE
___ ___ (
  SELECT m.id, t.team_long_name,
	  CASE WHEN m.home_goal > m.away_goal THEN 'MU Loss'
		   WHEN m.home_goal < m.away_goal THEN 'MU Win' 
  		   ELSE 'Tie' END AS outcome
  FROM match AS m
  LEFT JOIN team AS t ON m.awayteam_id = t.team_api_id)
-- Select the date, team names and goals
SELECT DISTINCT
    ___.___,
    ___.___ AS home_team_name,
    ___.___ AS away_team_name,
    ___.___,
    m.away_goal
-- Join the CTEs onto the match table
FROM match AS m
___ JOIN ___ ON m.id = ___
___ JOIN ___ ON m.id = ___
WHERE m.season = '2014/2015'
      AND (home.team_long_name = 'Manchester United' 
           OR away.team_long_name = 'Manchester United');
Code bewerken en uitvoeren