MySql排名系统有多个类别

时间:2014-05-29 17:39:20

标签: mysql sql

在我的游戏排名系统中,用户可以使用三个类别对游戏进行评级(例如: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查询来根据我上面提到的这些标准创建排名。

谢谢!

1 个答案:

答案 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

An SQLfiddle to test with

查询汇总所有类别并计算投票数,按game_id分组。在那之后,这只是一件简单的事情,或者根据你的需要进行排序。