我目前有球队所有比赛的清单,其中列出了球队名称,得分,对手名称和得分,以及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
答案 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
请注意,此查询利用了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)