我可以在不执行连接的情况下添加聚合列吗?

时间:2014-05-08 21:26:04

标签: sql postgresql join

我有一个包含三列table1的表a, b, c。我在c上执行了一个分组,而某些函数func(a,b) as d给了我view1,我创建了另一个专栏。要将d列添加到table1,我唯一能想到的就是在view1table1之间执行联接。但是,它们都有数百万行,而且速度非常慢。没有加入他们还有其他方法吗?直观地说它应该是可能的。

以下是脚本的片段

with 

found_mean
as
(select sum(count*avg)/sum(count) as combined_avg , b from view_1 group by b),

view_1_m
as
(select combined_avg , count , avg, variance , found_mean.b from found_mean , view_1 where       found_mean.b = view_1.b),

1 个答案:

答案 0 :(得分:1)

根据您的功能,您可以使用窗口功能(有时称为分析功能)。例如,如果您希望给定b的最大值a

select a, b, c, max(b) over (partition by a) as d
from table1;

如果没有更多信息,很难更具体。

编辑:

您应该可以使用分析函数执行此操作:

select count , avg, variance,
       (sum(count * avg) over (partition by b) /
        sum(count) over (partition by b)
       ) as weighted_average
from view_1;