PostgreSQL, как правило, довольно умен, так как не нужно вычислять одно и то же дважды. Так что запрос вроде
SELECT (SELECT hard_to_compute FROM whatever) AS X,
(SELECT hard_to_compute FROM whatever)*2 AS Y
FROM my_table
необходимо выполнить два подзапроса только один раз. Однако, если запрос похож на
SELECT (SELECT hard_to_compute FROM whatever) AS X,
(SELECT hard_to_compute*2 FROM whatever) AS Y
FROM my_table
тогда оптимизатору будет сложнее увидеть, что является одинаковым в двух запросах.
Другой способ справиться с этим - создать функцию STABLE для вычисления X. Пока входные данные одинаковы, функции STABLE всегда возвращают один и тот же результат в пределах одного оператора, поэтому Postgres знает, что его нужно запустить только один раз. , Смотри http://www.postgresql.org/docs/9.0/interactive/xfunc-volatility.html.