Сохранять расчеты внутри оператора select (postgres) - PullRequest
0 голосов
/ 15 мая 2019

Я хочу выполнить запрос, подобный следующему:

select
  sqrt(pow(sin(foo), 2)) + sqrt(1 - pow(sin(foo), 2)) as calc_value
from mytable

Это легко, если я не против повторить pow(sin(foo)) (что на самом деле является гораздо более сложным вычислением).Как мне сохранить результат этого вызова (и других вызовов), например так (псевдо-код):

select
  (
    a = pow(sin(foo))
    return sqrt(a) + sqrt(1 - a)
  ) as calc_value
from mytable

Я знаю, что могу использовать подзапросы, но для этого приложения я хочу избежать этого.

Я также знаю, что могу написать хранимую процедуру, но, если возможно, я бы тоже хотел этого избежать.

Спасибо.

1 Ответ

0 голосов
/ 15 мая 2019

Просто используйте боковую функцию join:

SELECT sqrt(a) + sqrt(1 - a) AS calc_value
FROM mytable, pow(sin(foo), 2) AS a;

Онлайн пример: https://dbfiddle.uk/?rdbms=postgres_11&fiddle=de5e492db3476d3d055e9bfc2e917414

Не думаю, что будет другое решение, пригодное для использования с sequelize, без возврата к необработанным запросам.

Это ваше решение: производительность выполнения и простота кода в дальнейшем.

...