8

それが理にかなっているように、私はいくつかの文脈を与えます。製品の顧客評価をテーブル(評価)にキャプチャしており、時間に基づいた評価の累積移動平均を返すことができるようにしたいと考えています。

基本的な例は、1日あたりの評価を取得することです。

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でそれをどのように実行しますか?

ありとあらゆるアドバイスに感謝します!

4

1 に答える 1

5

SQLAlchemyについてはわかりませんが、次のようなアプローチを使用する可能性があります。

  • 累積平均と評価カウントを個々の評価とは別に保存します。
  • 新しい評価を取得するたびに、累積平均と評価数を更新します。
    • new_count = old_count + 1
    • new_average =((old_average * old_count)+ new_rating)/ new_count
  • 必要に応じて、新しい評価ごとに1行を保存します。

平均数と評価数の更新は、単一のSQLステートメントで実行できます。

于 2011-08-24T23:37:46.780 に答える