[英]Can I add aggregated column without performing a join?
我有一個具有三列a, b, c
的表table1
。 我正在通過在c
上進行分組並使用某些函數func(a,b) as d
給我view1
創建另一列。 為了將d
列添加到table1
,我唯一想到的就是在view1
和table1
之間執行view1
。 但是,它們都具有數百萬行,而且速度真的很慢。 還有其他沒有加入他們的方式嗎? 從直覺上看,這應該是可能的。
這是腳本的片段
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),
您可以使用窗口函數(有時稱為分析函數),具體取決於您的函數。 例如,如果您想要給定a
的b
的最大值:
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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.