sql - PostgreSQL - 使用来自同一查询的先前计算值

标签 sql postgresql

我有以下 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/

相关文章:

sql - 使用保留字时间戳作为字段名称 (Firebird 2.5)

sql - 如何在另一个游标内声明一个游标

postgresql - 如何提高postgresql中的插入速度

java - 如何使用 OrmLite 和 Postgres 将 UUID 作为主键处理?

python - 如何在 pandas 上读取下载的 sql 查询

sql - 有什么办法可以用范围谓词停止索引搜索?

java - PSQL异常 : ERROR: insert or update on table "*" violates foreign key constraint

postgresql - 多对多表 - 性能很差

mysql - Rails + Postgres 与自定义外键的关系问题

MySQL查询每月选择一组项目