Добавление полей псевдонимов MySQL вместе - PullRequest
22 голосов
/ 30 июля 2010

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

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

Это всплывает и говорит, что неизвестный столбец итого в списке полей.

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

Ответы [ 4 ]

23 голосов
/ 30 июля 2010

Вот порядок выполнения вещей в ядре базы данных.

Обратите внимание, что это семантическое представление о том, как все выполняется, база данных может делать вещи в другом порядке, но она должна давать результаты, как если бы это было сделано таким образом.

  1. Сначала выполняется оценка FROM-части, откуда я могу получить данные от
  2. Затем оценивается WHERE-часть, какие строки нас интересуют
  3. Затем оценивается часть GROUP BY, как мы объединяем результирующие строки
  4. Затем оценивается HAVING-часть, какие группы нас интересуют
  5. Затем оценивается часть ORDER BY, в каком порядке нам нужны эти строки / группы
  6. Наконец, часть 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

6 голосов
/ 30 июля 2010
SELECT total, total2, total + total2 as grandtotal from (
 SELECT sum(EXPR) as total, 
        sum(EXPR) as total2,  
 FROM tablename 
) x
0 голосов
/ 30 июля 2010

Вы можете использовать переменные:

http://dev.mysql.com/doc/refman/5.0/en/user-variables.html

0 голосов
/ 30 июля 2010
SELECT
WITH Sums AS
(
 SELECT sum(EXPR) as total, 
        sum(EXPR) as total2
 FROM tablename 
)
SELECT SUM(sums);

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...