我有一个 MYSQL 表,它存储用户每个事件的评级,事件表中的 1-10 称为 event_rating。我要查找的是基于票数和评分的最准确评分,如下所示:
SELECT
c.userid,
c.user_name,
COUNT(d.event_rating) AS votesCount,
AVG(d.event_rating) AS votesAvg,
SUM(d.event_rating) AS tsum,
COUNT(d.event_rating)*AVG(d.event_rating)/COUNT(d.event_rating) as totalRating
FROM events d JOIN users c ON d.userid = c.userid WHERE (d.userid = '2') GROUP BY d.userid ORDER BY totalRating DESC
我为用户添加了两个虚拟评分,一个评分为 10,另一个评分为 5。
结果如下:
userid user_name votesCount votesAvg tsum totalRating
2 Rahul Khanna 2 7.5000 15 7.50000000
这准确吗?我的计算是否正确?
--- 编辑 ---
发布更多结果
使用 COUNT(d.event_rating)*AVG(d.event_rating)/COUNT(d.event_rating) as totalRating
userid user_name votesCount votesAvg tsum totalRating
2 Rahul Khanna 2 7.5000 15 7.50000000
1 Rita Agnihotri 9 4.8889 44 4.88888889
3 Daniel Springs 4 3.5000 14 3.50000000
4 Roger Myers 6 3.5000 21 3.50000000
5 Chun Tanakat 3 3.0000 9 3.00000000
使用 COUNT(d.event_rating)*AVG(d.event_rating) as totalRating
userid user_name votesCount votesAvg tsum totalRating
1 Rita Agnihotri 9 4.8889 44 44.0000
4 Roger Myers 6 3.5000 21 21.0000
2 Rahul Khanna 2 7.5000 15 15.0000
3 Daniel Springs 4 3.5000 14 14.0000
5 Chun Tanakat 3 3.0000 9 9.0000
--- 更多 ---
我应该改用下面的吗?
COUNT(d.event_rating)*AVG(d.event_rating)/10 as totalRating
我需要一种准确的方法来计算总评分,同时将 votesCount 考虑在内,并且评分必须在 1-10 之间。
--- 更多细节 ---
我有一张用户表和另一张表,用户可以添加新事件并对这些事件进行评分。事件表有一个 eventID、userid、event_rating 列。因此每个事件都可以对用户创建的事件进行评分。我想要的是计算所有事件评级以获得该用户的最大(总)评级。我希望无论用户创建了多少事件,总评分都在 1-10 之间且不超过 10。那可能吗?如果没有任何解决方案或想法?
感谢阅读:)
最佳答案
这是什么愚蠢的查询?
COUNT(d.event_rating)*AVG(d.event_rating)/COUNT(d.event_rating) as totalRating
这没什么
(a*b)/a
永远是 b
你只需要获取AVG(d.event_rating)
你到底想要什么??
关于MYSQL评分算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5854327/