SQL:计算平均值(AVG)时除以特定记录,而不是全部

问题描述 投票:0回答:1

我想计算仅在远离切尔西的比赛中的平均失球数,因此场

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))
python sql python-3.x database sqlite
1个回答
0
投票

您需要另一个子查询来获取整个锦标赛的前 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轮。

© www.soinside.com 2019 - 2024. All rights reserved.