Använda CASE och AVG för att beräkna andelar
CASE-satser returnerar vilket värde du anger i THEN-klausulen. Det är ett kraftfullt verktyg för avancerade beräkningar och datamanipulering när det kombineras med en aggregeringsfunktion. En viktig användning är att placera CASE inuti en AVG-funktion för att beräkna andelen poster som uppfyller ett visst villkor.
Så här kan det se ut:
AVG(CASE WHEN condition_is_met THEN 1
WHEN condition_is_not_met THEN 0 END)
Med den här metoden är det viktigt att noggrant ange vilka poster som ska räknas som 0, annars kan beräkningarna bli felaktiga!
Din uppgift är att undersöka antalet vinster, förluster och oavgjorda matcher i varje land. Tabellen matches är filtrerad till att inkludera alla matcher från säsongerna 2013/2014 och 2014/2015.
Den här övningen är en del av kursen
Datahantering i SQL
Övningsinstruktioner
- Inuti en
AVG()-funktion, slutförCASE-satsen genom att kontrollera omm.home_goalinte är lika medm.away_goal, och tilldela värdet0om det villkoret är uppfyllt. - Upprepa samma process för att jämföra hemma- och bortamål i
'2014/2015', och ge resultatet aliasetties_2014_2015.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
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;