Объвление переменной в запросе

Выполняю запрос, в котором несколько раз встречается одна и та же функция с одними и теми же параметрами. Например:

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 шт):

Автор решения: Ainar-G

Я предположу, что в большинстве случаев планировщик PostgreSQL достаточно умён, чтобы понять, что чистые функции для одних и тех же данных будут выдавать один и тот же результат. Но если вам так уж надо, просто заверните всё в подзапрос:


SELECT n AS total
     , n AS amount
     , n AS result
     , /* … */
  FROM
  (
    SELECT SUM(/* … */) AS n
      FROM /* … */
  ) AS t(n)
;
→ Ссылка