Объвление переменной в запросе
Выполняю запрос, в котором несколько раз встречается одна и та же функция с одними и теми же параметрами. Например:
SELECT sum($1, $2) AS total, sum($1, $2) AS amount, sum($1, $2) AS result ...
Возможно ли записать результат выполнения в некую переменную, чтобы не выполнять расчёт суммы каждый раз? Например, насколько я знаю, в MSSQL возможно следующее решение:
DECLARE @total INT
SET @total = SUM(1, 2)
Как сделать подобный запрос в PostgreSQL? Функция sum() приведена лишь для примера. На самом деле там каждый раз выполняется более "тяжёлая" функция и хотелось бы оптимизировать этот момент.
Ответы (1 шт):
Я предположу, что в большинстве случаев планировщик PostgreSQL достаточно умён, чтобы понять, что чистые функции для одних и тех же данных будут выдавать один и тот же результат. Но если вам так уж надо, просто заверните всё в подзапрос:
SELECT n AS total
, n AS amount
, n AS result
, /* … */
FROM
(
SELECT SUM(/* … */) AS n
FROM /* … */
) AS t(n)
;