Как добавить столбец на основе динамического столбца

Пример простого, чтобы упростить понимание вопроса, в реальном запросе будет сложно просто написать «значение + 20».

Примерная таблица

id | value |
-------------
 1 |   20  |
 2 |   30  |

Пример запроса:

SELECT id, value, value + 10 as value1, value1 + 10 as value2
FROM table;

Error: ERROR: column "value1" does not exist

Есть ли способ заставить этот запрос работать?

почему не value + 20 as [value2]?

Circle Hsiao 14.09.2018 12:44
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
1
62
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы не можете использовать псевдоним, определенный в предложении SELECT в том же предложении. Итак, просто повторите свою логику:

SELECT
    id,
    value,
    value + 10 AS value1,
    value + 20 AS value2
FROM table;

Я не знаю, представляет ли этот запрос вашу реальную проблему или это упрощение. Если у вас было сложное выражение в select, и вы действительно не хотели его повторять, вы можете выполнить подзапрос:

WITH cte AS (
    SELECT id, value, value + 10 AS value1
    FROM table
)

SELECT *, value1 + 10 AS value2
FROM cte;

@RaymondNijland Извините, опечатка :-(

Tim Biegeleisen 14.09.2018 13:00
Ответ принят как подходящий

Это слишком долго для комментария.

Вы не можете снова использовать псевдонимы, определенные в select, в тех же пунктах select, where или from (и многие базы данных распространяют это на group by и having).

Это правило в SQL. Вы можете задаться вопросом, почему, но вот простое объяснение select. Помните, что SQL определяется вокруг наборов, в которых нет порядка. SQL просто не гарантирует порядок вычисления выражений в select. Без этой гарантии двигатель не знает, что будет оцениваться в первую очередь.

Другие вопросы по теме