Результат вычисления повторного использования PostgreSQL в выбранном запросе
Например, используя SQL, я могу сделать:
SELECT (a+b) as c FROM table WHERE c < 5 AND (c*c+t) > 100;
Есть ли способ сделать это с помощью Postgres?
Ответ 1
Это может быть альтернатива, которую вы можете использовать:
SELECT foo.c
FROM (
SELECT (a+b) as c FROM table
) as foo
WHERE foo.c < 5
AND (foo.c*foo.c+t) > 100
С точки зрения производительности, я думаю, что это не оптимальное решение (из-за отсутствия предложения WHERE подзапроса foo, следовательно, возвращения всех записей таблицы). Я не знаю, выполняет ли Postgresql некоторую оптимизацию запросов.
Ответ 2
Вы не можете этого сделать. Ни в PostgreSQL, ни в стандартном SQL. Я цитирую руководство здесь:
Имя выходного столбца может использоваться для ссылки на значение столбца в ORDER BY и GROUP BY, но не в предложениях WHERE или HAVING; там вы должны выписать выражение вместо этого.
Можно было бы обсудить стандарт в этом отношении. Хью Дарвен на самом деле очень много делает, делая это в в этой статье Я недавно упоминался.