sql - 从包含 "Winners"和 "Losers"的表中获取获胜百分比

标签 sql sqlite select group-by union

我正在使用一个 SQLite 数据库,我在其中存储玩家之间的比赛/战斗,如下所示:

ma​​tchId[int] 获胜者[文本] 失败者[文本]

我提出了一些查询,总结了一名玩家赢得一场战斗的次数,以及另一项查询总结了一名玩家输掉的战斗次数。但是有没有办法在 SQL 中输入这个,以便我可以直接从数据库找到 win% 或者我必须在其他地方计算它?在其他地方计算这个没有问题,但我很好奇是否/如何可以纯粹用 SQL 来完成它。

我想要实现的基本上是:

SELECT winner, COUNT(winner) as Wins FROM Fights GROUP BY winner 

除以

SELECT loser, COUNT(loser) as Losses FROM Fights GROUP BY loser;

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

最佳答案

您可以使用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 之间的十进制数字,代表胜率。

关于sql - 从包含 "Winners"和 "Losers"的表中获取获胜百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62407846/

相关文章:

java - Sqlite 更新操作我可以添加值现有值吗?

sql - 如何将 SQL 查询中字段的结果更改为仅包含第一个下划线之前的字符?

MySQL - 仅当唯一时才计数

mysql - 如何创建查找表

mysql - IONIC 2 中的 Sqlite : sqlite3_prepare_v2 failure: near\\\"UNION\\\" : syntax error\},\“代码:5} 错误

ios - trigger.io 应用程序中有哪些可用/推荐的本地数据库(如果有)?

java - 选择单个单词或字符串(双击)以进行编辑

MySQL选择等于多个值的地方

MySQL:将多个不同的表合并为一个

mysql - 在一对多上构建 SQL 查询