MySQL: Summe von Summen bilden

Hallo zusammen,
leider viel mir kein besserer Titel ein.

Ich habe eine MySQL-Anweisung welche je nach Kriterium eine Summe bildet, z. B:

SELECT vorname, 
ROUND(SUM(CASE
WHEN (spalte\_x = 1) THEN (spalte\_wert \* 1 / 3)
ELSE (0)
END),2) AS w1,
ROUND(SUM(CASE
WHEN (spalte\_x = 2) THEN (spalte\_wert \*2 / 3)
ELSE (0)
END),2) AS w2,
...

Das Ergbnis sieht dann z. B. so aus:

vorname | w1 | w2
Peter | 0.33 | 0.66
Hans | 0.66 | 0.66

Nun möchte ich eine dritte Spalte mit dem Ergebnis w1 + w2 haben, das ganze natürlich mit möglichst wenig Code.
Habe schon folgendes Versucht:

SELECT ...
SUM (w1 + w2) AS w3
...

leider funktioniert dies nicht,
da die Spalten w1 und w2 nicht existieren.
Könnte das ganze vermutlich mit folgendem Code lösen:

ROUND(SUM(CASE
WHEN (spalte\_x = 2) THEN (spalte\_wert \*2 / 3)
ELSE (WHEN (spalte\_x = 1) THEN (spalte\_wert \*1 / 3)
ELSE(0))
END),2) AS w3,
...

Für eine kleine Aufgabe ist das sicherlich tragbar, aber wenn dann noch einige Spalten hinzukommen wird’s doch unübersichtlich.

Kennt jemand ne bessere Alternative?

Danke und Gruß

Marcel

Moin, Marcel,

strick doch zwei Views: Die eine ist Dein Select, der w1 und w2 liefert, die zweite heißt dann

 select w1, w2, w1+w2 as w3 from view1

Gruß Ralf

Hi!

strick doch zwei Views: Die eine ist Dein Select, der w1 und
w2 liefert, die zweite heißt dann

select w1, w2, w1+w2 as w3 from view1

Oder - im Prinzip dasselbe, nur halt ohne definierte View, sondern mit verschachteltem Select:

SELECT vorname,w1,w2,w1+w2
FROM (
SELECT vorname, 
ROUND(SUM(CASE
WHEN (spalte\_x = 1) THEN (spalte\_wert \* 1 / 3)
ELSE (0)
END),2) AS w1,
ROUND(SUM(CASE
WHEN (spalte\_x = 2) THEN (spalte\_wert \*2 / 3)
ELSE (0)
END),2) AS w2 ...
)

Grüße,
Tomh

DANKE Re: MySQL: Summe von Summen bilden
Danke euch beiden,
so komme ich weiter.

Gruß

Marcel