簡體   English   中英

是否可以在不執行聯接的情況下添加聚合列?

[英]Can I add aggregated column without performing a join?

我有一個具有三列a, b, c的表table1 我正在通過在c上進行分組並使用某些函數func(a,b) as d給我view1創建另一列。 為了將d列添加到table1 ,我唯一想到的就是在view1table1之間執行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),

您可以使用窗口函數(有時稱為分析函數),具體取決於您的函數。 例如,如果您想要給定ab的最大值:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM