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

Использование псевдонима в вычислениях SQL

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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

SELECT my_num*5 AS another_number FROM
(
    SELECT 10 AS my_num FROM table
) x

Ответ 3

Псевдонимы в 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";

Ответ 4

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

SELECT my_num, my_num*5 AS another_number
FROM table
CROSS APPLY 
(SELECT 5 AS my_num) X