Использование псевдонима в вычислениях SQL - PullRequest
57 голосов
/ 16 января 2010

Почему этот запрос не работает?

SELECT 10 AS my_num, my_num*5 AS another_number
FROM table

В этом примере я пытаюсь использовать псевдоним my_num в других вычислениях. Это приводит к неизвестному столбцу "my_num"

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

Ответы [ 4 ]

133 голосов
/ 02 августа 2013

Просто оберните ваш повторно используемый псевдоним с (SELECT alias):

SELECT 10 AS my_num, 
       (SELECT my_num) * 5 AS another_number
FROM table
10 голосов
/ 16 января 2010

Вам нужно будет использовать подвыбор, чтобы использовать псевдонимы таким образом

SELECT my_num*5 AS another_number FROM
(
    SELECT 10 AS my_num FROM table
) x
5 голосов
/ 16 января 2010

Псевдонимы в sql не похожи на переменные в языке программирования. На псевдонимы можно ссылаться снова только в определенных точках (особенно в пунктах GROUP BY и HAVING). Но вы не можете повторно использовать псевдоним в предложении SELECT. Таким образом, вы можете использовать производный запрос (например, предложенный Rubens Farias ), который позволяет вам переименовывать столбцы и / или называть любые вычисляемые столбцы.

Или вы можете использовать VIEW, если ваши формулы, как правило, фиксированы

CREATE VIEW table10 AS SELECT 10 AS my_num FROM table;
SELECT my_num * 5 AS another_number FROM table10;

Я считаю, что это будет немного быстрее, чем использование производного запроса, но, вероятно, это во многом зависит от вашего реального запроса.

Или вы можете просто дублировать работу:

SELECT 10 AS my_num, 10 * 5 AS another_number FROM table;

Что может быть удобно для чего-то вроде php / perl:

my $my_num = 10;
my $query = "SELECT $my_num AS my_num, $my_num * 5 AS another_number FROM table";
0 голосов
/ 30 августа 2016

`` Другой вариант - использовать оператор APPLY

SELECT my_num, my_num*5 AS another_number
FROM table
CROSS APPLY 
(SELECT 5 AS my_num) X
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...