我想从表 A 中选择一堆行,以及 avg(A.price) 和 avg(A.distance) 等聚合函数的结果。
现在,SELECT 查询需要一些时间,所以我不想运行一个查询来获取行,而另一个查询来获取平均值。如果我这样做了,我将运行查询以选择适当的行两次。
但是查看PostgreSQL窗口函数文档(http://www.postgresql.org/docs/9.1/static/tutorial-window.html),似乎使用窗口函数返回我想要使用的聚合函数的结果在返回的行旁边意味着返回的每一行都将包含聚合函数的结果。在我的例子中,由于聚合是针对主 SELECT 查询返回的所有行而不是其行的子集,这似乎很浪费。
考虑到我选择了 A 中行的一个子集但对整个子集进行聚合查询,多次返回相同的 avg() 对性能有何影响?特别是,Postgres 每次都重新计算平均值,还是以某种方式缓存平均值?
打个比方:如果您查看窗口函数文档并假设depname
SELECT 查询返回的每一行都是“开发”的,并且每一行的平均值都是相同的,因为平均值是在所有返回的行中计算的。该平均值计算了多少次?