8

我会给出一些上下文,所以它是有道理的。我正在表格(评级)中捕获产品的客户评级,并希望能够返回基于时间的评级的累积移动平均值。

一个基本示例如下:每天进行评分:

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...

我正在尝试一种不会可怕地扩展的方法。

我目前的想法是有一个函数,当将一行插入到 Rating 表中时,该函数会根据该产品的前一行计算 Cum Avg

所以字段将类似于:

TABLE: Rating
| RatingId | DateTime | ProdId | RatingVal | RatingCnt | CumAvg |

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

实现这一目标的(或任何)方法是什么?如果我要使用各种“触发器”,您将如何在 SQLAlchemy 中执行此操作?

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

4

1 回答 1

5

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

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

可以使用单个 SQL 语句来更新平均值和评分计数。

于 2011-08-24T23:37:46.780 回答