MySQL Anfrage für Fußball-Tabelle

master:mk82

Benutzer
Beiträge
9
Hallo Community,

ich bin jetzt schon einige Zeit auf der Suche nach der Lösung meines Problems, allerdings habe ich im Netz nur bedingt einen Lösungsansatz gefunden, so dass ich mich an euch wenden muss. Für mein Prpjekt möchte ich gerne eine Fußballtabelle anzeigen. Dazu habe ich eine Tabelle von Spielen angelegt, die folgende Informationen enthät:

datum
heimmannschaft (als id abgelegt)
auswaertsmannschaft (als id abgelegt)
tore_heim
tore_auswaerts
spieltags_id

Aus diesen Informationen soll nun eine Abfrage erstellt werden, die mir die Fußballtabelle sortiert ausgibt. Sicherlich gibt es auch die Möglichkeit, die Informationen Punkte, Tordifferenz und Tabellenplatz mit in die Datenbank aufzunehmen, wobei ich das als weniger sinnvoll erachte, da ich diese Informationen aus den Ergebnisse berechnen kann.

Die Tabelle sollte nach folgenden Regeln berechnet werden (offizielle Regel DFB):

Meister der Runde ist, wer nach Durchführung aller Spiele die meisten Gewinnpunkte erzielt hat. Absteiger sind die Mannschaften, die die wenigsten Gewinnpunkte erzielt haben. Bei Punktgleichheit werden nachstehende Kriterien in der aufgeführten Reihenfolge zur Ermittlung der Platzierung herangezogen:

  • die nach dem Subtraktionsverfahren ermittelte Tordifferenz
  • die Anzahl der erzielten Tore
  • das Gesamtergebnis aus Hin- und Rückspiel im direkten Vergleich
  • die Anzahl der auswärts erzielten Tore im direkten Vergleich
  • die Anzahl aller auswärts erzielten Tore
  • Ist auch die Anzahl aller auswärts erzielten Tore gleich, findet ein Entscheidungsspiel auf neutralem Platz statt.

Nach Möglichkeit würde ich es vermeiden, dass ich diese Informationen in meiner Applikation berechnen muss. Stattdessen soll dies die DB-Abfrage machen. Ich habe im Netz schon gelesen, dass MySQL die Möglichkeit von Funktionen und Prozeduren anbietet, allerdings habe ich da zu wenig Erfahrung damit. Kann mir hier jemand weiter helfen? Normal sollte es sich doch hierbei um ein allgemeines Problem handeln.


Gruß
 
Werbung:
Aus diesen Informationen soll nun eine Abfrage erstellt werden, die mir die Fußballtabelle sortiert ausgibt. Sicherlich gibt es auch die Möglichkeit, die Informationen Punkte, Tordifferenz und Tabellenplatz mit in die Datenbank aufzunehmen, wobei ich das als weniger sinnvoll erachte, da ich diese Informationen aus den Ergebnisse berechnen kann.

Vielleicht bekommt man das auch mit einem von weitem nach SQL aussehenden Zettelkasten hin, aber ich würde da schon echte Datenbanken bevorzugen, die auch Dinge wie Window-Funktionen können.

Wie weit bist Du denn schon bis jetzt gekommen?
 
Vielen Dank für die Antwort. Ich habe mir jetzt mal den Beitrag angesehen und bin auf eine andere Idee gekommen. Ich würde gerne meherer Queries ausführen und mir dabei die erspielten Punkte, erzielten Tore, gefallene Gegentore, etc. ausgeben lassen und diese dann über Order By sortieren lassen. Für die erspielten Punkte habe ich folgende Anweisung entworfen, allerdings bekomme ich die Fehlermeldung "#1054 - Unknown column 'Punkte' in 'field list'". Der Fehler ist mir klar (Punkte exisitiert nicht in meiner Tabelle), allerdings lasse ich ja diesen Wert berechnen. Hat jemand eine Idee, wie ich mir die Info ausgeben lassen kann?

SELECT heimteam,
CASE
WHEN tore_heim - tore_auswaerts >0
THEN 3
WHEN tore_heim - tore_auswaerts =0
THEN 1
ELSE 0
END AS Punkte, SUM( tore_heim ) , Punkte
FROM Spiel
GROUP BY heimteam
 
Für die erspielten Punkte habe ich folgende Anweisung entworfen, allerdings bekomme ich die Fehlermeldung "#1054 - Unknown column 'Punkte' in 'field list'". Der Fehler ist mir klar (Punkte exisitiert nicht in meiner Tabelle), allerdings lasse ich ja diesen Wert berechnen. Hat jemand eine Idee, wie ich mir die Info ausgeben lassen kann?

SELECT heimteam,
CASE
WHEN tore_heim - tore_auswaerts >0
THEN 3
WHEN tore_heim - tore_auswaerts =0
THEN 1
ELSE 0
END AS Punkte, SUM( tore_heim ) , Punkte
FROM Spiel
GROUP BY heimteam

Du berechnest das, nennst das Punkte. Damit zeigt es das an. Dann versuchst du, eine nicht vorhandene Spalte anzuzeigen -> Fehler. Schon mal in Betracht gezogen, auf den Fehler zu verzichten?
 
Das ist mir bewusst, dass die Information nicht in der Tabelle enthalten ist. Aber da ich es berechnet habe, möchte ich die Informatione auch gerne weiter verwenden. Hat jemand eine Idee, wie ich die Punkte in der Abfrage zusammen addieren kann?

Die Abfrage lautet korrekt so:

SELECT
heimteam,

CASE
WHEN tore_heim - tore_auswaerts > 0 THEN 3
WHEN tore_heim - tore_auswaerts = 0 THEN 1
ELSE 0
END AS Punkte,
SUM(Punkte),
Punkte

FROM Spiel group by heimteam
 
Das ist mir bewusst, dass die Information nicht in der Tabelle enthalten ist. Aber da ich es berechnet habe, möchte ich die Informatione auch gerne weiter verwenden. Hat jemand eine Idee, wie ich die Punkte in der Abfrage zusammen addieren kann?

Die Abfrage lautet korrekt so:

SELECT
heimteam,

CASE
WHEN tore_heim - tore_auswaerts > 0 THEN 3
WHEN tore_heim - tore_auswaerts = 0 THEN 1
ELSE 0
END AS Punkte,
SUM(Punkte),
Punkte

FROM Spiel group by heimteam

Laß einfach das letzte Punkte und das Komma davor weg.
 
SELECT
heimteam,

CASE
WHEN tore_heim - tore_auswaerts > 0 THEN 3
WHEN tore_heim - tore_auswaerts = 0 THEN 1
ELSE 0
END AS Punkte,
SUM(Punkte)

FROM Spiel group by heimteam

Diese Anfrage bringt die gleiche Fehlermeldung: #1054 - Unknown column 'Punkte' in 'field list'
 
SELECT
heimteam,

CASE
WHEN tore_heim - tore_auswaerts > 0 THEN 3
WHEN tore_heim - tore_auswaerts = 0 THEN 1
ELSE 0
END AS Punkte,
SUM(Punkte)

FROM Spiel group by heimteam

Diese Anfrage bringt die gleiche Fehlermeldung: #1054 - Unknown column 'Punkte' in 'field list'

Ah ja, Du kannst da noch nicht mit sum() drauf zugreifen. Also ein Select drum herum, oder aber um Dein case ein sum(), also sum(case when ...) group by ..., ist doch nicht sooo schwer, oder?
 
Schwere Geburt. Mit dieser Anweisung funktioniert es:

SELECT heimteam, SUM(
CASE
WHEN tore_heim - tore_auswaerts >0
THEN 3
WHEN tore_heim - tore_auswaerts =0
THEN 1
ELSE 0
END ) AS Punkte
FROM Spiel
GROUP BY heimteam

wie kann ich jetzt innerhalb einer Anfrage mehrere Selects durchführen, indem ich zum Beispiel die Punkte zu Hause und auswärts addiere?
 
Werbung:
Ich habe es geschafft *freu*. Die Anfrage befindet sich unten, für all diejenigen, die das selbe Problem haben. Jetzt muss ich nur noch die Heimtabelle mit der Auswärtstabelle verknüpfen und ich habe die aktuelle Tabelle.

Der heutige Tag hat mir gezeigt, dass ich doch mal wieder ein bisschen mehr mit SQL beschäftigen muss. Wenn man mal eine länger Zeit nicht mehr damit arbeitet, dann ist man schnell draußen. Vielen Dank für die Hilfe


SELECT
heimteam,

SUM(CASE
WHEN tore_heim - tore_auswaerts > 0 THEN 3
WHEN tore_heim - tore_auswaerts = 0 THEN 1
ELSE 0
END) AS Punkte,
SUM(tore_heim) AS tore_heim_summe,
SUM(tore_auswaerts) AS gegentore_heim_summe,
(SUM(tore_heim) - SUM(tore_auswaerts)) as tordiff

FROM Spiel group by heimteam order by Punkte DESC, tordiff DESC, tore_heim_summe DESC
 
Zurück
Oben