Aquí está el orden de cómo se ejecutan las cosas en un motor de base de datos.
Tenga en cuenta que esta es una vista semántica de cómo se ejecutan las cosas, la base de datos puede hacer las cosas en un orden diferente, pero tiene que producir resultados como si se hiciera de esta manera.
- Primero se evalúa la parte FROM, de dónde obtengo los datos
- Luego se evalúa la parte DONDE, en qué filas estamos interesados
- Luego se evalúa la parte GROUP BY, ¿cómo combinamos las filas resultantes
- Luego se evalúa la parte HAVING, en qué grupos estamos interesados
- Luego se evalúa la parte ORDER BY, en qué orden queremos esas filas/grupos
- Finalmente, se evalúa la parte SELECT, en qué columnas estamos interesados
Sin embargo, algunos motores de base de datos le permiten eludir esto, al usar "GROUP BY 2" para agrupar por la segunda columna en la parte SELECT, pero si se apega al orden anterior, ya debería saber que la razón por la que su código no funciona. No funciona es que no hay columnas con los nombres total o total2 (todavía).
En otras palabras, debe repetir las dos expresiones o encontrar otra forma de hacerlo.
Lo que puede hacer es usar una subconsulta (siempre que tenga una versión de MySQL que admita esto):
SELECT total, total2, total+total2 as grandtotal
FROM (
SELECT sum(EXPR) as total, sum(EXPR) as total2
FROM tablename
) x
Tachando el resto según el comentario.
Sin embargo, no sé mucho sobre MySQL, por lo que es posible que deba crear un alias para la subconsulta:
...
FROM tablename
) AS x
^-+^
|
+-- add this
Algunos motores de bases de datos tampoco permiten el uso de la palabra clave AS cuando se crean subconsultas, por lo que si lo anterior no funciona, intente esto:
...
FROM tablename
) x
^
|
+-- add this