Breuken afleiden met CASE en AVG
CASE-instructies geven elke waarde terug die je in je THEN-clausule opgeeft. Dit is een enorm krachtig hulpmiddel voor robuuste berekeningen en datamanipulatie wanneer je het combineert met een aggregatiefunctie. Een belangrijke taak die je kunt uitvoeren, is CASE binnen een AVG-functie gebruiken om een fractie te berekenen op basis van informatie in je database.
Zo zet je dat op:
AVG(CASE WHEN condition_is_met THEN 1
WHEN condition_is_not_met THEN 0 END)
Met deze aanpak is het belangrijk om precies aan te geven welke records meetellen als 0, anders kloppen je berekeningen mogelijk niet!
Je opdracht is om het aantal overwinningen, nederlagen en gelijke spelen per land te onderzoeken. De tabel matches is gefilterd en bevat alle wedstrijden uit de seizoenen 2013/2014 en 2014/2015.
Deze oefening maakt deel uit van de cursus
Gegevens manipuleren in SQL
Oefeninstructies
- Binnen een
AVG()-functie, maak deCASE-instructie af door te controleren ofm.home_goalniet gelijk is aanm.away_goal, en wijs de waarde0toe als aan deze voorwaarde wordt voldaan. - Herhaal dit proces om thuis- en uitdoelpunten in
'2014/2015'te vergelijken en geef dit het aliasties_2014_2015.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
SELECT
c.name AS country,
-- Calculate the fraction of tied games in each season
___(___ ___ m.season='2013/2014' AND m.home_goal = m.away_goal THEN 1
WHEN m.season='2013/2014' AND m.home_goal ___ m.away_goal THEN ___
END) AS ties_2013_2014,
___(___ ___ m.season='2014/2015' ___ ___ = ___ ___ ___
WHEN m.season='2014/2015' ___ m.home_goal != m.away_goal THEN ___
___) AS ___
FROM country AS c
LEFT JOIN matches AS m
ON c.id = m.country_id
GROUP BY country;