Aan de slagGa gratis aan de slag

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

Cursus bekijken

Oefeninstructies

  • Binnen een AVG()-functie, maak de CASE-instructie af door te controleren of m.home_goal niet gelijk is aan m.away_goal, en wijs de waarde 0 toe als aan deze voorwaarde wordt voldaan.
  • Herhaal dit proces om thuis- en uitdoelpunten in '2014/2015' te vergelijken en geef dit het alias ties_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;
Code bewerken en uitvoeren