解决MySQL排名中的关系

时间:2014-03-10 18:09:48

标签: mysql ranking

我有一个MySQL表,看起来像这样:

GOALS
------------------------
   PLAYER   |   GOALS
------------------------
     001    |    30
     002    |    25
     003    |    25
     004    |    20

我希望有一个基于排名的评分系统,可以为关系提供半分。在上面的示例中,它应如下所示:

GOALS
-----------------------------------
   PLAYER   |   GOALS   |   SCORE
-----------------------------------
     001    |    30     |    4
     002    |    25     |    2.5
     003    |    25     |    2.5
     004    |    20     |    1

如果是三方平局:

GOALS
-----------------------------------
   PLAYER   |   GOALS   |   SCORE
-----------------------------------
     001    |    30     |    5
     002    |    25     |    3
     003    |    25     |    3
     004    |    25     |    3
     005    |    20     |    1

如何在mySQL中完成这样的事情?

谢谢!

1 个答案:

答案 0 :(得分:2)

SELECT a.player, a.goals, (SUM(a.goals > b.goals) + 1 + SUM(a.goals >= b.goals))/2 AS score
FROM goals a
CROSS JOIN goals b
GROUP BY player

DEMO

这是有效的,因为SUM(a.goals > b.goals) + 1是所有绑定玩家的最低等级,而SUM(a.goals >= b.goals)是最高等级。因此,这可以平均范围的两端来获得分数。