Anteile berechnen mit CASE und AVG
CASE-Anweisungen geben den Wert zurück, den du in deiner THEN-Klausel angibst. Diese Anweisung ist ein unglaublich starkes Instrument für zuverlässige Berechnungen und Datenbearbeitungen, wenn sie in Verbindung mit einer Aggregatfunktion verwendet wird. Eine wichtige Aufgabe, die du ausführen kannst, ist die Verwendung von CASE innerhalb einer AVG-Funktion, um einen Anteil der Daten in deiner Datenbank zu berechnen.
Hier ist ein Beispiel dafür, wie du das machst:
AVG(CASE WHEN condition_is_met THEN 1
WHEN condition_is_not_met THEN 0 END)
Bei diesem Ansatz ist es wichtig, dass du genau angibst, welche Datensätze als 0 zählen, sonst sind deine Berechnungen möglicherweise nicht korrekt!
Deine Aufgabe ist es, die Anzahl der Siege, Niederlagen und Unentschieden in jedem Land zu bestimmen. Die Tabelle matches ist so gefiltert, dass sie alle Spiele aus den Spielsaisons 2013/14 und 2014/15 enthält.
Diese Übung ist Teil des Kurses
Datenbearbeitung in SQL
Anleitung zur Übung
- Schließe in der Funktion
AVG()dieCASE-Anweisung ab, indem du prüfst, obm.home_goalnicht gleichm.away_goalist, und sollte das der Fall sein, setzt du den Wert auf0. - Dasselbe machst du, um die Heim- und Auswärtstore in
'2014/2015'zu vergleichen. Du verwendest dabei den Aliasties_2014_2015.
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
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;