Usare CASE e AVG per ricavare frazioni
Le istruzioni CASE restituiscono qualsiasi valore tu specifichi nella clausola THEN. Se usate insieme a una funzione di aggregazione, sono uno strumento potentissimo per calcoli robusti e manipolazione dei dati. Un'operazione chiave che puoi svolgere è usare CASE dentro una funzione AVG per calcolare una frazione di informazioni nel tuo database.
Ecco un esempio di come impostarla:
AVG(CASE WHEN condition_is_met THEN 1
WHEN condition_is_not_met THEN 0 END)
Con questo approccio, è importante indicare con precisione quali record valgono 0, altrimenti i calcoli potrebbero non essere corretti!
Il tuo compito è analizzare il numero di vittorie, sconfitte e pareggi in ogni paese. La tabella matches è filtrata per includere tutte le partite delle stagioni 2013/2014 e 2014/2015.
Questo esercizio fa parte del corso
Manipolazione dei dati in SQL
Istruzioni dell'esercizio
- All'interno di una funzione
AVG(), completa l'istruzioneCASEverificando chem.home_goalsia diverso dam.away_goal, assegnando il valore0se questa condizione è soddisfatta. - Ripeti il processo per confrontare i gol in casa e fuori nella stagione
'2014/2015', usando l'aliasties_2014_2015.
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
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;