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