从包含“获胜者”和“失败者”的桌子中获得胜出百分比

时间:2020-06-16 11:55:18

标签: sql sqlite select group-by union

我正在使用一个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;

对于每个玩家,在此表中是“赢家”或“输家”。我还有一个表格(玩家),将所有这些玩家保存为“玩家”,可以用来完成这项工作。

1 个答案:

答案 0 :(得分:1)

您可以使用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

对于每个参与至少一场战斗的玩家,这将为您提供01之间的十进制数字,代表获胜率。

相关问题