我正在构建一个锦标赛系统,需要根据两个标准对球队进行排序:
- 积分(赢得一系列 3 场比赛得 2 分)
- 游戏差异(游戏赢 - 输)
现在我有一个积分表列,一个用于赢得的个人比赛,一个用于输掉的个人比赛。
我从按点排序的数据库中得到结果(按点排序)。问题出在个人排名上。如果A队和B队的积分相同,但B队在赢得和输掉的比赛之间的差距更高,正,那么B队的排名将高于A队。
由于所有比赛不会在同一时间进行,而且有些球队可能会落后于他们的日程安排,因此完全可能的情况是一支球队比另一支球队赢得更多,但差异更差。
现在我能想到的唯一解决方案如下:
- 从数据库中获取数据(按点排序)
- 计算每个点值的出现次数(例如:9pts.x2、7pts.x5...)
- 根据步骤 2 确定所需的数组数量。 将数据
- 排序到这些数组中,同样取决于点值。
- 如果数组的长度大于 1,则根据赢得的比赛和输掉的比赛之间的差异对其进行排序。
- 打印最终结果。
这对我来说似乎效率很低。有什么更好的主意吗?
这将起作用:
select name, wins, losses, points, (wins - losses) as "diff"
from teams
order by points desc, diff desc
演示:http://sqlfiddle.com/#!2/4ea97/1