我有一个专栏 weights
还有一列 recall
,我想计算 recall
过去7天基于 weights
,我已经有了计算移动平均值的查询 OVER
然而,对于计算加权移动平均数,我认为我将不得不用 AVG
将函数聚合到其他一些函数,这些函数包含两列,如 WEIGHTED_AVG(recall, weights)
,有什么办法吗?这是我目前的问题。
SELECT
weights,
recall,
avg(recall) OVER(ROWS 6 PRECEDING) AS recall_ma_week FROM TableA;
例子 TableA
可能是:
recall weight
0.5 3
0.2 2
0.3 4
0.4 2
0.3 6
0.2 8
例如,对于最后一行,我要计算的数字应该是 0.2*8 + 0.3*6 + ... / (8 + 6 + ...)
,在公式中, sum(weight * recall) / sum(weight)
,什么时候 sum(weight) == 0
,将该值返回为1.0。如果我能够创建一个定制的聚合函数,那就太棒了,但我不知道如何在纯sql中实现它。
1条答案
按热度按时间gopyfrb31#
只需使用算术: