在我的游戏排名系统中,用户可以使用三个类别对游戏进行评级(例如:cat1,cat2,cat3)。
table game_ranking
| id | user_id | game_id | cat1 | cat2 | cat3 |
| 1 | 1 | 1 | 5 | 7 | 8 |
| 2 | 1 | 2 | 10 | 8 | 5 |
| 3 | 2 | 2 | 1 | 4 | 5 |
| 4 | 3 | 1 | 5 | 7 | 8 |
| 5 | 4 | 1 | 2 | 3 | 6 |
| 6 | 7 | 3 | 6 | 6 | 3 |
| 7 | 9 | 3 | 3 | 10 | 7 |
排名必须基于每个类别列的总和。
例如:game_id 2得分= cat1(10 + 1)+ cat2(8 + 4)+ cat3(5 + 5)。 所以game_id 2得分是33。
如果两个或多个游戏的得分相同,则投票数最高的游戏应该在另一个游戏之上。
我需要一个MySql查询来根据我上面提到的这些标准创建排名。
谢谢!
答案 0 :(得分:0)
相当直接的SUM / GROUP BY将满足您的需求;
SELECT game_id, SUM(cat1+cat2+cat3) score, COUNT(*) votes
FROM game_ranking
GROUP BY game_id
ORDER BY score DESC, votes DESC
查询汇总所有类别并计算投票数,按game_id分组。在那之后,这只是一件简单的事情,或者根据你的需要进行排序。