ÎncepețiÎncepe gratuit

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

Vezi cursul

Instrucțiuni pentru exercițiu

  • În interiorul funcției AVG(), completează instrucțiunea CASE verificând dacă m.home_goal nu este egal cu m.away_goal, atribuind valoarea 0 dacă această condiție este îndeplinită.
  • Repetă același proces pentru a compara golurile marcate acasă și în deplasare în '2014/2015', utilizând aliasul ties_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;
Editează și rulează codul