我想从表A中选择一些行,同时也要得到像avg(A.price)和avg(A.distance)这样的聚合函数的结果。
现在,SELECT查询需要花费很长时间,因此我不想运行两个查询分别获取行和平均值。如果那样做,我将运行两次查询来选择适当的行。
但是,在查看PostgreSQL窗口函数文档(http://www.postgresql.org/docs/9.1/static/tutorial-window.html)时,似乎使用窗口函数来返回我想要使用的聚合函数的结果以及返回的行意味着每个返回的行都包含聚合函数的结果。在我的情况下,由于聚合是在主SELECT查询返回的所有行而不是其行的子集上进行的,因此这显得很浪费。
如果返回相同的avg()多次,会有什么性能影响,特别是在我选择A表的子集但对整个子集执行聚合查询的情况下?具体来说,Postgres是否会每次重新计算平均值,还是会以某种方式缓存平均值?
类比一下:如果您查看窗口函数文档,并假装depname
对于SELECT查询返回的每一行都是“develop”,并且由于平均值是在返回的所有行中计算得出的,因此每行的平均值相同。那么这个平均值会被计算多少次?