我会给出一些背景,这是有道理的。我在表(评级)中捕获产品的客户评级,并希望能够根据时间返回评级的累积移动平均值。
每天评分后的基本示例:
02 FEB - Rating: 5 - Cum Avg: 5
03 FEB - Rating: 4 - Cum Avg: (5+4)/2 = 4.5
04 FEB - Rating: 1 - Cum Avg: (5+4+1)/3 = 3.3
05 FEB - Rating: 5 - Cum Avg: (5+4+1+5)/4 = 3.75
Etc...
我试图想出一种不会出现可怕扩展的方法。
我目前的想法是在将一行插入评级表时触发一个函数,该表根据该产品的前一行计算出累积平均值
所以字段会是这样的:
TABLE: Rating
| RatingId | DateTime | ProdId | RatingVal | RatingCnt | CumAvg |
但这似乎是存储数据的一种相当狡猾的方式。
完成此任务的方式是什么(或任何方式)?如果我要使用各种“触发器”,你如何在SQLAlchemy中这样做呢?
赞赏任何建议!
答案 0 :(得分:5)
我不了解SQLAlchemy,但我可能会使用这样的方法:
使用单个SQL语句可以更新平均值和评级计数。
答案 1 :(得分:-5)
我认为你应该把MA存储在一个2元素列表中,它会更加简单:
#first rating 5 is rating number 0
a = [5,0]
#next:
for i in rating:
a = [(a[0]*a[1]+lastRating)/(a[1]+1),a[1]+1]
再见