Här är ordningen för hur saker och ting exekveras i en databasmotor.
Observera att detta är en semantisk bild av hur saker exekveras, databasen kan göra saker i en annan ordning, men den måste ge resultat som om det gjordes på detta sätt.
- Först utvärderas FROM-delen, varifrån får jag data
- Då utvärderas WHERE-delen, vilka rader är vi intresserade av
- Då utvärderas GROUP BY-delen, hur kombinerar vi de resulterande raderna
- Då utvärderas HAVING-delen, vilka grupper vi är intresserade av
- Då utvärderas ORDER BY-delen, vilken ordning vill vi ha dessa rader/grupper
- Slutligen utvärderas SELECT-delen, vilka kolumner är vi intresserade av
Vissa databasmotorer låter dig dock kringgå detta genom att säga "GROUP BY 2" för att gruppera efter den 2:a kolumnen i SELECT-delen, men om du håller dig till ovanstående ordning bör du veta vid det här laget att anledningen till att din kod inte Det fungerar inte är att det inte finns några kolumner med namnen total eller total2 (ännu).
Med andra ord måste du antingen upprepa de två uttrycken eller hitta ett annat sätt att göra det på.
Vad du kan göra är att använda en underfråga (förutsatt att du använder en MySQL-version som stöder detta):
SELECT total, total2, total+total2 as grandtotal
FROM (
SELECT sum(EXPR) as total, sum(EXPR) as total2
FROM tablename
) x
Stryker resten enligt kommentaren.
Jag kan dock inte mycket om MySQL så du kanske måste alias underfrågan:
...
FROM tablename
) AS x
^-+^
|
+-- add this
Vissa databasmotorer tillåter inte heller användning av nyckelordet AS vid aliasing av undersökningar, så om ovanstående inte fungerar, prova detta:
...
FROM tablename
) x
^
|
+-- add this