Вот порядок выполнения вещей в ядре базы данных.
Обратите внимание, что это семантическое представление о том, как все выполняется, база данных может делать вещи в другом порядке, но она должна давать результаты, как если бы это было сделано таким образом.
- Сначала выполняется оценка FROM-части, откуда я могу получить данные от
- Затем оценивается WHERE-часть, какие строки нас интересуют
- Затем оценивается часть GROUP BY, как мы объединяем результирующие строки
- Затем оценивается HAVING-часть, какие группы нас интересуют
- Затем оценивается часть ORDER BY, в каком порядке нам нужны эти строки / группы
- Наконец, часть SELECT оценивается, какие столбцы нам интересны
Некоторые механизмы баз данных позволяют обойти это, хотя, сказав «GROUP BY 2» для группировки по 2-му столбцу в части SELECT, но если вы придерживаетесь вышеуказанного порядка, вы должны знать, что причина того, что Ваш код не работает, потому что нет столбцов с именами total или total2 (пока).
Другими словами, вам нужно либо повторить два выражения, либо найти другой способ сделать это.
Что вы можете сделать, это использовать подзапрос (при условии, что вы используете версию MySQL, которая поддерживает это):
SELECT total, total2, total+total2 as grandtotal
FROM (
SELECT sum(EXPR) as total, sum(EXPR) as total2
FROM tablename
) x
Вычеркните остальное согласно комментарию.
Я не знаю много о MySQL, хотя, возможно, вам придется псевдоним подзапроса:
...
FROM tablename
) AS x
^-+^
|
+-- add this
Некоторые движки баз данных также не разрешают использовать ключевое слово AS при псевдонимах подзапросов, поэтому, если приведенное выше не работает, попробуйте следующее:
...
FROM tablename
) x
^
|
+-- add this