我想计算仅在远离切尔西的比赛中的平均失球数,因此场
team_away=Chelsea
,但比赛仅限于1st round
和2nd round
。
问题:我可以用
LIMIT
限制记录,但问题是除法(添加失球数后计算平均值的除法(score_home
))不正确,因为它除以team_away的所有记录=切尔西(第2、4、5轮)。相反,我只想除以其中存在 team_away=Chelsea
的所选记录的数量(在表格示例中,仅第 2 轮)
信息永远不会固定,所以我想实现这一点:
在
team_away=Chelsea
和 1st round
中搜索切尔西是否为 team_away (2nd round
),然后:
team_away
仅在round 1
,那么score_home / 1
team_away
仅在round 2
,那么score_home / 1
team_away
,那么(score_home for round 1 + score_home for round 2) / 2
team_away
,那么就没有平均水平显然,将来我会添加更多轮次,因此代码必须设计为适用于许多轮次,而不仅仅是 2 轮。
id | 圆形 | 团队主页 | 团队离开 | 分数主页 | 客场得分 |
---|---|---|---|---|---|
5 | 利物浦 | 切尔西 | 3 | 2 | |
4 | 联合 | 切尔西 | 0 | 1 | |
3 | 利兹 | 布莱顿 | 1 | 3 | |
2 | 托特纳姆热刺 | 切尔西 | 2 | 2 | |
1 | 阿森纳 | 富勒姆 | 2 | 0 |
cursor_test.execute("""
SELECT AVG(score_home)
FROM (SELECT score_home
FROM Results
WHERE team_away=?
ORDER BY round DESC
LIMIT 2;)
""",(Team_Away))
您需要另一个子查询来获取整个锦标赛的前 2 轮,而不需要团队过滤器。
SELECT AVG(res.score_home)
FROM Results AS res
JOIN (
SELECT round
FROM Results
ORDER BY round
LIMIT 2
) AS rd ON res.round = rd.round
WHERE res.team_away = ?
rd
子查询将仅返回第1轮和第2轮。然后,当您将其与Result
连接并按res.team_away = ?
过滤时,您将只获得CHELSEA
的第2轮。