Hallo zusammen!
Ich habe (vereinfacht dargestellt) folgende MySQL Tabelle (nennen wir sie "ergebnisse"):
id |
datum |
punkte |
spieler1 |
2023-12-20 |
15 |
spieler3 |
2023-12-20 |
12 |
spieler2 |
2023-12-17 |
9 |
spieler3 |
2023-12-17 |
17 |
... |
... |
... |
Ich möchte gerne den "Punkte-Trend" darstellen und dabei für jeden einzelnen Spieler folgendes berechnen: 1) Den Durchschnitt der vergangenen 5 Einträge. 2) Den Durchschnitt der vergangenen 10 Einträge. 3) Den Gesamtdurchschnitt.
Das Resultat sollte so aussehen:
id |
durchschnitt5 |
durchschnitt10 |
durchschnittGesamt |
spieler1 |
17.5 |
16.3 |
12.5 |
spieler2 |
9.7 |
14.2 |
16.1 |
spieler3 |
19.7 |
15.6 |
16.7 |
... |
... |
... |
... |
Ist es möglich, dies mit einer einzigen MySQL Abfrage zu erreichen?
Ich muss vorneweg sagen, dass ich kein Datenbank-Experte bin. Ich habe mir jedoch mit Hilfe von Google folgende Abfrage zusammengestellt:
SELECT
e.id,
(SELECT AVG(letzte5.punkte) FROM (
SELECT punkte FROM ergebnisse WHERE id = e.id ORDER BY datum DESC LIMIT 5) AS letzte5
) AS durchschnitt5,
(SELECT AVG(letzte10.punkte) FROM (
SELECT punkte FROM ergebnisse WHERE id = e.id ORDER BY datum DESC LIMIT 10) AS letzte10
) AS durchschnitt10,
(SELECT AVG(alle.punkte) FROM (
SELECT punkte FROM ergebnisse WHERE id = e.id) AS alle
) AS durchschnittGesamt
FROM ergebnisse e
GROUP BY e.id;
Die einzelnen Bestandteile der Abfrage funktionieren und ergeben Sinn für mich. Aber als Ganzes zusammengefügt, bekomme ich einen Fehler: "Unbekanntes Tabellenfeld 'e.id' in where clause". Weiteres Suchen scheint drauf hinzuweisen, dass es ein Problem mit dem Alias 'e.id' gibt und, dass dieser wohl nicht im WHERE-Teil genutzt werden kann. Ich weiß aber nicht, wie ich die Abfrage umschreiben muss bzw. ob mein Ansatz komplett daneben ist.
Würde mich über Tips, Hinweise, Untersütztung sehr freuen.
Vielen Dank im Voraus!