Kom igångKom igång gratis

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

Visa kurs

Övningsinstruktioner

  • Inuti en AVG()-funktion, slutför CASE-satsen genom att kontrollera om m.home_goal inte är lika med m.away_goal, och tilldela värdet 0 om det villkoret är uppfyllt.
  • Upprepa samma process för att jämföra hemma- och bortamål i '2014/2015', och ge resultatet aliaset ties_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;
Redigera och kör kod