我想用SQL来获得5"最好的"额定档案。问题是,我不希望排名完全基于成绩。
假设有一个等级为8.1的个人资料,但有5个评论我想要这样,以便评分为7.9和30的评论将排名更高。
如果等级最高为.3,而且最低30%的评论高于另一个,我怎样才能实现这一目标?
这是我现在的查询:(平均=评分,评论=评论数量)
SELECT name,reviews,average
FROM profiles
WHERE average >= 7
AND reviews >= 50
ORDER BY average DESC, reviews DESC
LIMIT 5
答案 0 :(得分:1)
您可以在ORDER BY
子句中执行类似的计算。我会一直试着看看我是否可以完全你想要的是什么,但是首先,你可以对这样的排序进行加权。
SELECT name,reviews,average
FROM profiles
WHERE average >= 7
AND reviews >= 50
ORDER BY (average*.7 + reviews*.3)
LIMIT 5
答案 1 :(得分:1)
嗯,我不确定你是如何实施你的具体规则的。
通常在面对此任务时,我经常从评估的估计值中减去一个标准误差。这给出了评级的下限,具有一定程度的置信度。一般来说,评论越多,信心越强,标准差越低。
如果你知道个人评论,可以很容易地计算出来:
SELECT name, count(*) as numreviews, avg(reviews),
avg(review) - std(review)/sqrt(count(*)) as avg_lb
FROM reviews r
ORDER BY avg_lb DESC
LIMIT 5;
如果您没有收集个人评论的标准差,则此方法将无效。
答案 2 :(得分:0)
您可以动态计算个人资料的实际评分并按此排序。
类似的东西:
SELECT name,reviews,average, (reviews * average) AS rating FROM profiles WHERE average >= 7 AND reviews >= 50 ORDER BY rating DESC LIMIT 5
在上面的示例中,您可以使用您想要的任何算法替换(reviews * average)
来计算评级。
请记住,如果您有一个复杂的算法,查询可能会变慢,您可能希望有一个专门的列,并在每次算法中涉及的任何变量发生更改时重新计算评级。