我正在使用SQLite数据库来存储玩家之间的比赛/战斗,如下所示:
matchId [int]获胜者[文本]失败者[文本]
我进行了查询,以总结一名球员赢得了一场战斗的次数,而另一项则是关于一名球员输了多少场战斗的信息。但是在SQL中有没有一种方法可以键入此值,这样我就可以直接从数据库中找到胜率,还是必须在其他地方计算出胜率?在别处计算该值没有问题,但是我很想知道是否/如何可以完全在SQL中完成它。
我想要实现的基本上是:
SELECT winner, COUNT(winner) as Wins FROM Fights GROUP BY winner
除以
SELECT loser, COUNT(loser) as Losses FROM Fights GROUP BY loser;
对于每个玩家,在此表中是“胜利者”或“失败者”。我还有一张桌子(Players),将所有这些球员都视为“球员”,可以用来完成这项工作。
您可以使用union all
和聚合:
select player, avg(win) as win_ratio
from (
select winner as player, 1.0 as win from fights
union all
select loser, 0 from fights
) t
group by player
[这给您每个参与至少一场战斗的玩家一个在0
和1
之间的十进制数字,代表获胜率。