0
我正在實施asp.net中的評分系統。我有一張評分表。評分表的結構簡單,使用舊的AverageRating和新值計算新的平均值
表姓名:評分
Id ProductId RatingValue
1 1 3.5
2 1 3.0
3 1 2.5
4 2 4.0
,而現在從我使用內置的AVG函數SQL表中選擇數據,
ISNULL(AVG([Rating].[RatingValue]), 0)
這做工精細。現在,當用戶對數據庫中的同一產品再次進行評級時,我必須在Sql表「評級」中插入新的評級,並且必須用新的平均評級更新標籤控制。我可以在將記錄保存到數據庫表格後使用select語句來完成此操作,但是這會額外往返數據庫。現在我有舊的AverageRating值和產品評級的次數。
我現在有兩個選擇。
選項1:無論是從某種程度上INSERT語句中返回新AverageValue(我可以選擇標識列,但不知道我是否可以選擇列的平均與否)選項2
:使用舊AverageRating和應用程序中的CountRated值。我可以使用這些值的新評估值來計算運行時的新值。
哪個選項最好,以及如何實現它們?
謝謝@Xaruth。它解決了我的問題。我必須首先檢查評級是否是第一次,然後在標籤中顯示原始的RatingValue,否則我使用您的公式。因爲如果評級是第一次,那麼CountRated和AverageRating的值就是0. – 2014-11-24 14:25:16
我認爲你不需要,因爲第一次會是:'(0 * 0 + RatingValue)/(0 + 1)'。所以第一次,AverageRating = RatingValue。 – Xaruth 2014-11-24 14:29:14
是的,你是絕對正確的。實際上,在此之前我爲了不同的目的遞增了RatingValue。 RatingCount ++ – 2014-11-24 14:35:11