Ответ 1
Здесь порядок действий в механизме базы данных.
Обратите внимание, что это семантическое представление о том, как выполняются вещи, база данных может делать вещи в другом порядке, но она должна давать результаты, как если бы это было сделано таким образом.
- Сначала вычисляется 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
Забастовкa >