Her er rækkefølgen for, hvordan tingene udføres i en databasemotor.
Bemærk, at dette er en semantisk visning af, hvordan ting udføres, databasen kan gøre tingene i en anden rækkefølge, men den skal producere resultater, som om det blev gjort på denne måde.
- Først evalueres FROM-delen, hvor får jeg data fra
- Så evalueres WHERE-delen, hvilke rækker er vi interesserede i
- Derefter evalueres GROUP BY-delen, hvordan kombinerer vi de resulterende rækker
- Derefter vurderes HAVING-delen, hvilke grupper vi er interesserede i
- Derefter evalueres ORDER BY-delen, hvilken rækkefølge vil vi have disse rækker/grupper
- Til sidst evalueres SELECT-delen, hvilke kolonner er vi interesserede i
Nogle databasemotorer giver dig dog mulighed for at omgå dette ved at sige "GROUP BY 2" for at gruppere efter 2. kolonne i SELECT-delen, men hvis du holder dig til ovenstående rækkefølge, bør du nu vide, at grunden til, at din kode ikke Det virker ikke er, at der ikke er nogen kolonner med navnene total eller total2 (endnu).
Du skal med andre ord enten gentage de to udtryk eller finde en anden måde at gøre det på.
Hvad du kan gøre er at bruge en underforespørgsel (forudsat at du har en MySQL-version, der understøtter dette):
SELECT total, total2, total+total2 as grandtotal
FROM (
SELECT sum(EXPR) as total, sum(EXPR) as total2
FROM tablename
) x
Resten overstreges som i kommentaren.
Jeg ved dog ikke meget om MySQL, så du skal muligvis kalde underforespørgslen:
...
FROM tablename
) AS x
^-+^
|
+-- add this
Nogle databasemotorer tillader også at bruge søgeordet AS ved aliasing af underforespørgsler, så hvis ovenstående ikke virker, prøv dette:
...
FROM tablename
) x
^
|
+-- add this