Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 基于1-5票的人气排序算法_Mysql_Algorithm_Ranking - Fatal编程技术网

Mysql 基于1-5票的人气排序算法

Mysql 基于1-5票的人气排序算法,mysql,algorithm,ranking,Mysql,Algorithm,Ranking,我正在开发一个新网站,其中有一些“实体”可以投票 每次投票可以是1到5之间的数字,其中1是最差的投票,5是最好的投票 现在,在同一个网站上,我有一个“受欢迎的实体图”,其中我根据投票列出了最受欢迎的“实体” 现在,我不能做简单的算术平均,因为一个投5票的“实体”可以和一个投100票的“实体”拥有相同的排名 我考虑过为每个“实体”存储投票数,而不是算术平均数,并做一个SQL查询,其中我按投票数和算术平均数排序,但似乎在此之后,一个投票数为1的实体可能会受到欢迎(当它不受欢迎时) 我可以使用什么算法

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

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

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

现在,我不能做简单的算术平均,因为一个投5票的“实体”可以和一个投100票的“实体”拥有相同的排名

我考虑过为每个“实体”存储投票数,而不是算术平均数,并做一个SQL查询,其中我按投票数和算术平均数排序,但似乎在此之后,一个投票数为1的实体可能会受到欢迎(当它不受欢迎时)


我可以使用什么算法?

对于基本解决方案,请尝试按[average vote]desc、[vote count]desc的顺序进行排序。这样,在两个具有相同平均值的实体中,拥有100票的实体将高于拥有1票的实体,但平均值为4.5的实体将永远不会高于平均值为5的实体

编辑1

如果你想以4.5票的100票平均数战胜5票的10票平均数,为什么不忽略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

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

我提出了如何实现我想要的“执行SQL查询,其中我按投票数和算术平均数排序”的想法。简单地说,如果我在这里搜索是因为我没有更好的想法,所以我在这里搜索一些对抗。我认为StackOverflow并不是唯一一个需要修复语法错误的代码的地方。你有点太迂腐了。从开始。如上所述:这是一个必须做出的设计决策,尽可能多地给出先验信息。一个简单的方法比直接采用平均值要好得多,即考虑每个实体以一定数量的“3”选票(例如100个这样的选票)开始,然后通过包括这两个默认票数来平均。和实际的一样,这不会让一个拥有1000票1的实体胜过一个拥有500票5的服务器吗?你的回复的编辑并不是那么糟糕,一个好的方法可以像组{{ }}=1, 2, 3 }和{ 4, 5 }=UP <代码>顺序[平均投票] DESC,[投票计数]。desc将按平均值排序,然后按计数进行子排序。这不可能比5票的一票多1票,就像4票的1000票会低于5票的一票。“4票的1000票会低于5票的一票”是我想要避免的。在这一点上,我认为最好先按[票数]排序,然后按[平均票数]排序