对数据进行排名,然后对所有排名进行平均,并对其进行排名


Ranking data and then average out all the rankings, and rank those

这基本上是我想做的。假设你正在建立一个网站,对在电子游戏中获得高分的人进行排名。您有一个用户,他在级别1、级别2和级别3上的得分分别为100、150和200。然后,您会有另一个得分分别为200、100和100的用户。如果你在看用户1,你会得到一个这样的表:

|得分|排名|级别1:|100|2|级别2:|150|1|级别3:|200|1|

我已经学会了如何将分数存储在MySQL表中,然后对数据进行排名。这就是它变得有点棘手的地方。假设你想平均出一个用户的所有排名。对于用户1,您将得到1.333。对于用户2,您将获得1.666。因此,如果你对这些数据进行排名,你会得到这样的表格:

|平均排名|排名|用户1:|1.33|1|用户2:|1.666|2|

基本上,最好的方法是什么?

最有效的方法可能是在提取数据时在MySQL查询中使用聚合函数。

http://www.mysqltutorial.org/mysql-aggregate-functions.aspx

 "SELECT level, AVG(Rank) FROM (YOUR TABLE NAME HERE) GROUP BY level"

将为您的某个表提供排名列的平均值。我假设每张桌子代表一名球员。如果是这种情况,则必须对每个用户表运行此查询。另外请注意,我假设级别1-级别3是您唯一的ID。

假设您的表与相似

LevelID (int)
UserID (int)
Score (int)

你可能会做一些类似的事情

SET @rank = 0;
SELECT *, AVG(Score) as AverageScore, @row_num := @row_num + 1 as Rank FROM scores
GROUP BY UserID
ORDER BY `AverageScore` DESC

我使用平均分数和排名而不是平均排名的原因是谁使用平均排名?这很奇怪,而且很难计算。如果你展示你的SQL获取排名,那么它会更容易。如果您实际将排名存储在表中(这不是一个好的做法),那么您可以只按UserID和AVG(排名)

排序