我有一个看起来像这样的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中完成?

谢谢!

最佳答案

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)是最高排名。因此,这将平均范围的两端以获得分数。

10-07 18:48