【发布时间】:2014-08-27 08:48:09
【问题描述】:
我正在尝试从我拥有的匹配表中获取排名列表。 matches 表中的每一行代表已进行的一场比赛,包括赢家和输家。排名应基于特定玩家累积的胜利次数。我目前有一个查询根据获胜次数对玩家进行排名,但它排除了获胜次数为 0 的玩家。
如何调整我的查询,以使结果中包含 0 胜的玩家?我是否可以考虑损失,以便根据失败次数对 0 胜的玩家进行排名?
所有相关信息如下。谢谢。
matches表:
winner | loser | winner_score | loser_score
--------------------------------------------------------
Jason | Alex | 15 | 13
Bill | Jason | 14 | 11
Alex | Bill | 12 | 6
Jason | Scott | 13 | 8
我当前的查询:
SELECT t1.player,
(SELECT Count(*)
FROM (SELECT Count(*) AS wins,
winner AS player
FROM matches
GROUP BY winner
ORDER BY wins DESC) t2
WHERE t2.wins > t1.wins)
+ 1 AS rank,
t1.wins
FROM (SELECT Count(*) AS wins,
winner AS player
FROM matches
GROUP BY winner
ORDER BY wins DESC) t1
我目前的结果:
player | rank | wins
------------------------------
Jason | 1 | 2
Bill | 2 | 1
Alex | 2 | 1
我想要的结果:
player | rank | wins | losses
---------------------------------------------
Jason | 1 | 2 | 1
Bill | 2 | 1 | 1
Alex | 2 | 1 | 1
Scott | 3 | 0 | 1
【问题讨论】:
-
玩家只能互相玩一次吗?
-
不,他们可以互相玩不止一次
-
在这种情况下,您没有主键。这可能有问题。
-
也许我疯了,但我觉得如果您将用户从匹配表中分离出来,而是使用他们的 id,则可以更轻松地进行管理。