Używanie CASE i AVG do obliczania ułamków
Instrukcja CASE zwraca dowolną wartość podaną w klauzuli THEN. To niezwykle przydatne narzędzie do zaawansowanych obliczeń i przekształcania danych – szczególnie gdy połączymy je z funkcją agregującą. Jednym z kluczowych zastosowań jest umieszczenie CASE wewnątrz funkcji AVG, co pozwala wyliczyć udział określonych rekordów w całości danych.
Oto przykład takiego podejścia:
AVG(CASE WHEN condition_is_met THEN 1
WHEN condition_is_not_met THEN 0 END)
Przy tej metodzie ważne jest, aby dokładnie określić, które rekordy mają wartość 0 – inaczej wyniki obliczeń mogą być niepoprawne!
Twoim zadaniem jest zbadanie liczby zwycięstw, porażek i remisów w każdym kraju. Tabela matches jest przefiltrowana tak, aby obejmowała wszystkie mecze z sezonów 2013/2014 i 2014/2015.
To ćwiczenie jest częścią kursu
Data Manipulation in SQL
Instrukcje do ćwiczenia
- Wewnątrz funkcji
AVG()uzupełnij instrukcjęCASE, sprawdzając, czym.home_goalnie jest równem.away_goal, i przypisując wartość0, jeśli ten warunek jest spełniony. - Powtórz ten proces, porównując gole gospodarzy i gości w sezonie
'2014/2015', nadając aliasaties_2014_2015.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
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;