如何在Python/SQLAlchemy/Flask中计算累积移动平均值

mal*_*wan 8 python sqlalchemy flask flask-sqlalchemy

我会给出一些背景,这是有道理的.我在表(评级)中捕获产品的客户评级,并希望能够根据时间返回评级的累积移动平均值.

一个基本的例子是每天评分:

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...
Run Code Online (Sandbox Code Playgroud)

我试图想出一种不会可怕扩展的方法.

我目前的想法是,当一行插入到评级表中时,有一个函数被触发,该表根据该产品的前一行计算出Cum Avg

因此字段将是这样的:

TABLE: Rating
| RatingId | DateTime | ProdId | RatingVal | RatingCnt | CumAvg |
Run Code Online (Sandbox Code Playgroud)

但这似乎是存储数据的一种相当狡猾的方式.

完成此任务的方法是什么(或任何方式)?如果我要使用各种"触发器",你如何在SQLAlchemy中这样做呢?

任何和所有建议表示赞赏!

ʇsә*_*ɹoɈ 5

我不知道SQLAlchemy,但我可能会使用这样的方法:

  • 将累积平均值和评级计数与各个评级分开存储.
  • 每次获得新评级时,请更新累计平均值和评分计数:
    • new_count = old_count + 1
    • new_average =((old_average*old_count)+ new_rating)/ new_count
  • (可选)为每个新评级存储一行.

可以使用单个SQL语句更新平均值和评级计数.