我有以下 sql 查询:
SELECT (SELECT ...) AS X, (SELECT ...) AS Y from my_table
'X' 很难计算,它被用作计算 Y 的输入。但是,如果我尝试在计算 Y 的查询中甚至在主查询中引用 X,我会收到以下错误消息:
Error: column "X" does not exist
一旦计算出 X,是否有任何方法可以引用它?我真的不想计算两次,因为这看起来效率很低。
最佳答案
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 .
关于sql - PostgreSQL - 使用来自同一查询的先前计算值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5067745/