Zacznij terazZacznij za darmo

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

Zobacz kurs

Instrukcje do ćwiczenia

  • Wewnątrz funkcji AVG() uzupełnij instrukcję CASE, sprawdzając, czy m.home_goal nie jest równe m.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 aliasa ties_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;
Edytuj i uruchom kod