Пример простого, чтобы упростить понимание вопроса, в реальном запросе будет сложно просто написать «значение + 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
Есть ли способ заставить этот запрос работать?


Вы не можете использовать псевдоним, определенный в предложении 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 Извините, опечатка :-(
Это слишком долго для комментария.
Вы не можете снова использовать псевдонимы, определенные в select, в тех же пунктах select, where или from (и многие базы данных распространяют это на group by и having).
Это правило в SQL. Вы можете задаться вопросом, почему, но вот простое объяснение select. Помните, что SQL определяется вокруг наборов, в которых нет порядка. SQL просто не гарантирует порядок вычисления выражений в select. Без этой гарантии двигатель не знает, что будет оцениваться в первую очередь.
почему не
value + 20 as [value2]?