【问题标题】:MySql ranking system with multiple categories [duplicate]具有多个类别的MySql排名系统[重复]
【发布时间】:2014-07-19 07:46:30
【问题描述】:

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

谢谢!

【问题讨论】:

  • 您是否尝试过任何聚合函数,如 SUM,或使用 ORDER BY 排序?有什么错误或您不能使用那些有据可查的方法的原因吗?

标签: mysql sql


【解决方案1】:

一个相当简单的 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分组。之后,这只是一件简单的事情或根据您的需要订购。

【讨论】:

  • Joachim,您的代码运行良好。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-15
  • 1970-01-01
  • 2018-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多