Použití CASE a AVG pro výpočet zlomků
CASE výrazy vrátí libovolnou hodnotu, kterou zadáš v klauzuli THEN. Ve spojení s agregačními funkcemi jde o nesmírně silný nástroj pro výpočty a práci s daty. Jednou z klíčových technik je použití CASE uvnitř funkce AVG, díky kterému můžeš spočítat podíl určitých záznamů v databázi.
Takhle vypadá základní struktura:
AVG(CASE WHEN condition_is_met THEN 1
WHEN condition_is_not_met THEN 0 END)
Při tomto přístupu je důležité přesně určit, které záznamy se počítají jako 0 – jinak výsledky nebudou správné!
Tvým úkolem je zjistit počet výher, proher a remíz v každé zemi. Tabulka matches je filtrována tak, aby obsahovala pouze zápasy ze sezón 2013/2014 a 2014/2015.
Toto cvičení je součástí kurzu
Manipulace s daty v SQL
Pokyny k cvičení
- Uvnitř funkce
AVG()dokončiCASEvýraz tak, že ověříš, jestlim.home_goalnení rovnom.away_goal, a přiřadíš hodnotu0, pokud je tato podmínka splněna. - Zopakuj tento postup pro porovnání domácích a venkovních gólů v sezóně
'2014/2015'a výsledek pojmenuj aliasemties_2014_2015.
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
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;