计算累积胜率

时间:2019-03-26 05:07:07

标签: mysql mysqli

我目前有球队所有比赛的清单,其中列出了球队名称,得分,对手名称和得分,以及W(赢),L(失)或D(平局)从我的表格“ MatchDetails2017”中。我想做的是显示每局比赛后的累积胜率。

我花了几个小时试图在线寻求帮助,但遇到了麻烦。

SELECT Game, WL, ((SELECT COUNT(WL) FROM MatchDetails2017 WHERE Team = 'TeamName' AND WL = 'W')/COUNT(*))*100   
FROM MatchDetails2017
WHERE Team = 'TeamName'
GROUP BY Game

例如,我希望数据以这种方式显示...

Game|Result|Win%
    1|W|100.00
    2|W|100.00
    3|W|100.00
    4|L|75.00
    5|D|60.00
    6|W|66.67

这是我目前得到的结果...

1 W 5200.0000
2 W 5200.0000
3 W 5200.0000
4 L 5200.0000
5 D 5200.0000
6 W 5200.0000

2 个答案:

答案 0 :(得分:1)

要使这项工作有效,COUNT(*)计算总游戏数也只需要覆盖之前的游戏,因此您需要将其带入子查询。您还需要将子查询限制为仅包含和包含当前游戏的游戏:

SELECT Game, 
       WL AS Result,
       (SELECT SUM(WL = 'W') / COUNT(*) FROM MatchDetails2017 m2 WHERE m2.Game <= m1.Game AND m2.Team = m1.Team) * 100 AS `Win%`
FROM MatchDetails2017 m1
WHERE Team = 'TeamName'

输出:

Game    Result  Win%
1       W       100
2       W       100
3       W       100
4       L       75
5       D       60
6       W       66.6667

Demo on dbfiddle

请注意,此查询利用了MySQL在数字上下文中将布尔值视为1或0的事实,因此我们可以SUM(WL = 'W')来获取获胜总数。

答案 1 :(得分:0)

在MySQL 8+中,我们可以尝试使用except作为分析函数:

credentials = service_account.Credentials.from_service_account_file(json.key)

def query_to_dataframe(query):
    try:
        return pd.read_gbq(query,
                     project_id=project_id,
                     credentials=credentials,
                     dialect='standard')
    except GenericGBQException:
        print("failed")
query = """
SELECT 

*FROM `bigquery-public-data.google_analytics_sample.ga_sessions_20170801` """

df = query_to_dataframe(query)
print(df)