1.1k Aufrufe
Gefragt in Datenbanken von
Hallo,

ich möchte in MySQL (vereinfacht) Folgendes machen:

SELECT
SUM(punkte) AS punkte_gesamt,
COUNT(punkte) AS anzahl_spiele,
(punkte_gesamt/anzahl_spiele) AS punkte_pro_spiel
FROM abc
WHERE name="xyz"


Das ergibt jedoch immer den Fehler: Unknown column 'punkte_gesamt' in 'field list'. Mir ist klar, dass "punkte_gesamt" nicht in der Tabelle vorhanden ist und der Fehler deshalb angezeigt wird.

Ich könnte natürlich Folgendes machen:

SELECT
SUM(punkte) AS punkte_gesamt,
COUNT(punkte) AS anzahl_spiele,
(SUM(punkte)/COUNT(punkte)) AS punkte_pro_spiel
FROM abc
WHERE name="xyz"


Es scheint mir aber irgendwie "ineffizient" die Werte, die mit SUM bzw. COUNT gebildet werden, ein zweites Mal zu berechnen, obwohl ich sie doch eigentlich schon kenne.

Gibt es in MySQL eine Möglichkeit die berechneten Werte für Punkte und Spiele "wiederzuverwenden" um die Punkte pro Spiel zu ermitteln?

(Ich möchte dies vor allem deshalb machen, weil meine eigentlich Abfrage etwas komplexer als ein einfaches COUNT/SUM ist.)


Vielen Dank im Voraus!

3 Antworten

0 Punkte
Beantwortet von repiv Mitglied (272 Punkte)
Hallo,

ich gebe hier mal eine mögliche Lösung für den SQL Server von MS an. Evtl. kannst Du das auf MySql übertragen.
Beide Möglichkeiten basieren darauf, die Berechnungen in 2 Schritten durchzuführen, aber keine Berechnung 2x.

Ich denke das müssen aber schon sehr komplexe Berechnungen sein, damit dort ein Vorteil merkbar wird. Außerdem könnte ich mir vorstellen, dass die DB diese doppelte Berechnung bereits erkennt und deshalb nicht 2x ausführt.

Gruß Martin

--1. Möglichkeit Unterabfrage
SELECT punkte_gesamt,anzahl_spiele,(punkte_gesamt/anzahl_spiele) AS punkte_pro_spiel
FROM(
SELECT
SUM(punkte) AS punkte_gesamt,
COUNT(punkte) AS anzahl_spiele,
FROM abc
WHERE name="xyz") AS SelectErgebnis


--2.Möglichkeit: Temporäre Tabelle

CREATE TABLE #Test (punkte_gesamt int ,anzahl_spiele int )

INSERT INTO #TmpTablle
Select SUM(punkte) AS punkte_gesamt,COUNT(punkte) AS anzahl_spiele
From Table_1

SELECT punkte_gesamt,anzahl_spiele,(punkte_gesamt/anzahl_spiele) AS punkte_pro_spiel
FROM #TmpTablle

DROP TABLE #TmpTablle
0 Punkte
Beantwortet von lorf55 Mitglied (699 Punkte)
Hallo,
hast du mal
SELECT
punkte_gesamt = SUM(punkte),
COUNT(punkte) AS anzahl_spiele,
(punkte_gesamt/anzahl_spiele) AS punkte_pro_spiel
FROM abc
WHERE name="xyz"
probiert?

Gruß
0 Punkte
Beantwortet von
Hallo - eine verspätete Antwort von mir (da ich nur am Wochenende dazu komme mich mit diesem Thema zu beschäftigen).

Danke erstmal für eure Hinweise!

@lorf55: Dein Vorschlag führt leider zur selben Fehlermeldung, die ich bereits oben gepostete hatte ("Unknown column 'punkte_gesamt' in 'field list'").

@repiv: Dein erster Vorschlag mit der Unterabfrage gefällt mir sehr gut und funktioniert auch in MySQL.

Nochmals vielen Dank!


Gruß
...