我有一张名为"访问"包含cols:" rid" (房间ID),"评级"。
表格:访问次数
node.js
如上所示,每次访问都有一个从0到10的选项。
我不希望将0票作为票数。
现在我一直在使用这个查询来获得评分最高的房间(但是有重量!所以10票的1票优于9票的40票)。
例如,输出:
-----------------
| rid | rating |
-----------------
| 5 | 8 |
| 5 | 6 |
| 8 | 9 |
| 5 | 7 |
| 5 | 0 |
| 4 | 5 |
-----------------
查询:
-----------------
| rid | rating |
-----------------
| 5 | 7.42 |
| 8 | 6.94 |
| 4 | 6.43 |
-----------------
我觉得输出不是很准确。
您是否在代码中看到任何问题?感谢。
答案 0 :(得分:1)
我猜加权平均值你会需要像
这样的东西SELECT rid ,
COUNT(*) room_votes,
SUM(v.rating) room_rating,
(SUM(v.rating)/(t.total_votes * 10)) weighted_rating,
t.total_votes
FROM visits v
CROSS JOIN (SELECT
COUNT(*) total_votes
FROM visits
WHERE rating <> 0
) t
WHERE v.rating <> 0
GROUP BY v.rid
weighted_rating =每个房间的评级总和/表中所有房间的所有投票数和* 10(由于评级范围1 - 10)
================================================================
rid room_votes room_rating weighted_rating total_votes
------ ---------- ----------- --------------- -------------
4 1 5 0.1000 5
5 3 21 0.4200 5
8 1 9 0.1800 5
================================================================