Подтвердить что ты не робот

Добавление полей псевдонимов MySQL вместе

Рассмотрим запрос, похожий на:

 SELECT sum(EXPR) as total,
        sum(EXPR) as total2, 
        sum(total+total2) as grandtotal 
 FROM tablename

Это появляется и говорит о неизвестном столбце в списке полей.

Нужно ли ссылаться на поля псевдонима в вычислении без повторного набора выражения суммы, потому что sum(EXPR) с каждой стороны очень длинный.

4b9b3361

Ответ 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 >

Ответ 2

SELECT total, total2, total + total2 as grandtotal from (
 SELECT sum(EXPR) as total, 
        sum(EXPR) as total2,  
 FROM tablename 
) x

Ответ 3

SELECT @total1 := sum(EXPR), 
       @total2 := sum(EXPR),  
       @total1 + @total2 as grandtotal  
FROM tablename 

Ответ 4

SELECT
WITH Sums AS
(
 SELECT sum(EXPR) as total, 
        sum(EXPR) as total2
 FROM tablename 
)
SELECT SUM(sums);

для вас поклонники tsql...