【问题标题】:Sorting by preferred average value按首选平均值排序
【发布时间】:2015-06-14 13:35:09
【问题描述】:

我正在制作一款涉及人们下载和评价用户创建的地图的游戏。如果他们喜欢/不喜欢地图,他们可以选择赞成/反对地图,并以 1-10 的等级对其难度进行评分。

在地图浏览器中,他们可以选择按最高评分对地图进行排序。这是使用Laplace smoothing 完成的,因此它将赞成票的数量和评分总数纳入排序,按(upvotes + 1)/(numRatings + 2) 排序。这很好用。

现在,还有一个按首选难度排序的选项,人们可以在 1-10 之间选择一个值,它会按照平均难度等级与首选等级的接近程度对地图进行排序。起初我是按ABS(preferred_difficulty - average_difficulty) 排序的,但这并没有考虑到评分的数量。现在我使用((numRatings + 1) * (10 - ABS(average_difficulty - preferred_difficulty)) + 1) / (numRatings + 1.5) 是出于纯粹的反复试验,这有点效果,但有时评分的数量超过了首选难度,结果看起来很奇怪。

这是我需要帮助的问题 - 在将评分数量纳入组合时,我无法弄清楚如何按首选难度和平均难度之间的最小差异进行排序,因为我想要一个具有高评分计数的低难度增量成为最好的结果,而不是像收视率那样获得高评分数的高票数。

例如,如果这是数据:

AvgDifficulty      NumRatings
      6.0                 1
      4.0                25
      6.8                 4
      6.2                 3
      6.5                20
      6.2                 1
      6.4                 3

并且有人选择了 6.4 的首选难度,我希望它排序如下:

AvgDifficulty      NumRatings
      6.5                20 
      6.4                 3   
      6.2                 3
      6.8                 4
      6.2                 1  
      6.0                 1
      4.0                25  

基本上,我希望结果接近顶部的首选难度,但我宁愿显示有很多评分的 0.1 分的结果,而不是只有很少评分的完全匹配的结果。我知道在这种情况下获得“正确”的结果可能不是很具体,我只是在寻找一个起点。

感谢您的帮助!

【问题讨论】:

  • 请编辑您的问题并提供示例数据和所需结果(在问题的表格结构中)。这么长的解释没有例子很容易让人误解。
  • @GordonLinoff 添加了一个示例。

标签: mysql sorting


【解决方案1】:

你的问题有点模糊。您需要一些方法来结合评级和计数。基本查询是:

order by abs(avg_difficulty - 6.4)

但是,您也想包括计数。您可以在顶部定义一个固定波段并按排名对其进行排序:

order by (case when abs(avg_difficulty - 6.4) < 0.1) then numratings end) desc,
         abs(avg_difficulty - 6.4)

此表达式将 6.3 - 6.5 的所有内容组合在一个组中,并按评分数量对这些内容进行排序。第二个键按差异对其他所有内容进行排序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-24
    • 2012-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多