我想根据票数创建一个权重评级。 因此,1 票 5 票不会比 4 票 4 票好。
我找到了这个数学形式:
贝叶斯 = ( (avg_num_votes * avg_rating) + (this_num_votes * this_rating) )/(avg_num_votes + this_num_votes)
如何使 MySQL SELECT 获取最佳评分图像的 ID。
我有一张用于 IMAGE 的表和一张用于 VOTING 的表
投票:
id
imageID
totalVotes
avgVote
我想我必须在 SELECT 中使用 SELECT 来做到这一点,但是怎么做呢?
最佳答案
第一步是计算 avg_num_votes
和 avg_rating
:
SELECT
SUM(totalVotes)/COUNT(*) AS avg_num_votes,
SUM(avgVote)/COUNT(*) AS avg_rating
FROM voting;
如果您可以忍受小错误,偶尔计算一次可能就足够了。
现在使用您的公式和上面的值,您可以运行称重查询。作为一个小优化,我预先计算了 avg_num_votes * avg_rating
并将其命名为 avg_summand
SELECT
voting.*, -- or whatever fields you need
($avg_summand+totalVotes*avgVote)/($avg_num_votes+totalVotes) AS bayesian
FROM voting
ORDER BY bayesian DESC
LIMIT 1;
编辑
您可以将其作为连接运行:
SELECT
voting.*, -- or whatever fields you need
(avg_num_votes*avg_rating+totalVotes*avgVote)/(avg_num_votes+totalVotes) AS bayesian
FROM voting,
(
SELECT
SUM(totalVotes)/COUNT(*) AS avg_num_votes,
SUM(avgVote)/COUNT(*) AS avg_rating
FROM voting AS iv
) AS avg
ORDER BY bayesian DESC
LIMIT 1;
但这会计算每个查询的总和和平均值 - 称之为性能炸弹。
关于MySQL 权重评分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13512613/