Utilizarea CASE și AVG pentru calculul fracțiilor
Instrucțiunile CASE pot returna orice valoare specifici în clauza THEN. Acest lucru le face un instrument extrem de puternic pentru calcule complexe și manipularea datelor, mai ales când sunt combinate cu funcții de agregare. Una dintre utilizările cheie este plasarea CASE în interiorul funcției AVG pentru a calcula o fracție din informațiile din baza ta de date.
Iată cum arată această structură:
AVG(CASE WHEN condition_is_met THEN 1
WHEN condition_is_not_met THEN 0 END)
Cu această abordare, este important să specifici cu precizie care înregistrări primesc valoarea 0, altfel calculele pot fi incorecte!
Sarcina ta este să analizezi numărul de victorii, înfrângeri și egaluri din fiecare țară. Tabelul matches este filtrat pentru a include toate meciurile din sezoanele 2013/2014 și 2014/2015.
Acest exercițiu face parte din cursul
Manipularea datelor în SQL
Instrucțiuni pentru exercițiu
- În interiorul funcției
AVG(), completează instrucțiuneaCASEverificând dacăm.home_goalnu este egal cum.away_goal, atribuind valoarea0dacă această condiție este îndeplinită. - Repetă același proces pentru a compara golurile marcate acasă și în deplasare în
'2014/2015', utilizând aliasulties_2014_2015.
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
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;