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