gpt4 book ai didi

mysql - 基于投票从 1 到 5 的人气排名算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:11:31 26 4
gpt4 key购买 nike

我正在开发一个新网站,其中有一些“实体”可以投票。

每票可以是 1 到 5 之间的数字,其中 1 是最差的一票,5 是最好的一票。

现在,在同一个网站上,我有一个“热门实体图表”,其中我根据他们的投票列出了最受欢迎的“实体”。

现在,我不能做简单的算术平均,因为一票 5 票的“实体”可能与 100 票 5 票的“实体”具有相同的排名。

我考虑过为每个“实体”存储的不仅是算术平均值,还有票数,并执行 SQL 查询,我按票数和算术平均值排序,但似乎在此之后,一个实体有很多票1 可能会流行(当它不流行时)。

我可以使用什么算法?

最佳答案

对于一个基本的解决方案,尝试 order by [average vote] desc, [vote count] desc 这样从两个具有相同平均票数的实体中,获得 100 票的将超过获得 100 票的实体1 票,但平均 4.5 票永远不会超过平均 5 票。

编辑 1

如果您希望 100 票的平均票数为 4.5 胜于 10 票的平均票数为 5,为什么不计算忽略 1、2 和 3 的票数,或者 [计票 4 和 5] - [计票投票 1 和 2]?这样一来,赞成的投票数量将拉高实体的排名。

编辑2

您可能希望格外重视最近的投票。某个实体可能发生了某些变化,从而改变了用户对它的看法。可以建立上个月投票的另一个平均值,并根据它调整最终排名。

编辑3

如何计算 [popularityScore] 列并按它排序?

-- sum instead of average
-- square root of sum will reduce importance of vote count a bit
select
entity,
sqrt(sum(vote - 3)) as popularityScore
from Votes
group by entity
order by rank desc

-- 50 votes of 5 -> popularityScore = 12.25
-- 100 votes of 4 -> popularityScore = 10
-- 200 votes of 4 -> popularityScore = 14.14
-- 2000 votes of 4 -> popularityScore = 44.72
-- 2000 votes of 5 -> popularityScore = 63.25
-- 100000000 votes of 3 -> popularityScore = 0

可以计算上个月的相同分数并将其添加到该值。

关于mysql - 基于投票从 1 到 5 的人气排名算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48212022/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com