我正在开发一个新网站,里面有一些“实体”可以投票。
每一票可以是1到5之间的数字,其中1是最差票,5是最好票。
现在,在同一个网站,我有一个“热门实体图表”,其中我列出了最受欢迎的“实体”根据他们的投票。
现在,我不能做简单的算术平均,因为一个5票的“实体”可能和一个5票100票的“实体”有相同的排名。
我想为每个“实体”存储的不是算术平均数,而是投票数,并做了一个sql查询,我按投票数和算术平均数排序,但似乎在这之后,一个拥有1的许多投票数的实体可以得到流行(当它不流行时)。
我可以使用什么算法?
1条答案
按热度按时间cidc1ykv1#
要找到基本解决方案,请尝试
order by [average vote] desc, [vote count] desc
这样,在平均数相同的两个实体中,获得100票的实体将高于获得1票的实体,但平均数为4.5的实体将永远不会高于平均数为5的实体。编辑1
如果你想让100票的平均票数4.5比10票的平均票数5获胜,为什么不忽略1、2和3进行计票,或者[计票4和5]-[计票1和2]?通过这种方式,赞成票的计数将提高实体的排名。
编辑2
你可能想对最近的投票给予额外的重视。某个实体可能发生了某些变化,从而改变了用户对它的看法。可能会建立上个月投票的另一个平均值,并在此基础上调整最终排名。
编辑3
计算一个[popularityscore]列并按它排序怎么样?
可以计算上个月的相同分数并将其添加到此值中。