我想运行如下查询:
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
我知道我可以使用子查询,但是对于此应用程序,我想避免这种情况。
我也知道我可以编写一个存储过程,但是如果可能的话,我也想避免这种情况。
谢谢。
答案 0 :(得分:0)
只需使用横向函数联接:
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
我认为在不退回到原始查询的情况下,还有其他解决方案可用于续集。
这是您的决定:执行性能与序列化代码的难易程度。