You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修正SQL计算指定轮次Chelsea客场失球平均值的逻辑需求

切尔西客场特定轮次失球平均值计算问题

需求

仅计算切尔西(Chelsea)作为客场球队(team_away=Chelsea)在第1轮、第2轮比赛中的失球平均值,其中失球数对应数据表中的score_home字段(主队进球数即客队失球数)。

现有问题

原代码使用LIMIT 2限制记录,存在两个核心问题:

  1. 错误选取了切尔西最近的2场客场比赛(如示例中的第5、4轮),而非指定的第1、2轮;
  2. 即便筛选到目标轮次,原逻辑的AVG计算不符合要求——需要仅以实际符合轮次条件的记录数作为除数,而非所有切尔西客场记录数。

计算规则

  • 若切尔西仅在第1轮客场:平均值 = 该轮score_home / 1
  • 若切尔西仅在第2轮客场:平均值 = 该轮score_home / 1
  • 若两轮均为客场:平均值 = (第1轮score_home + 第2轮score_home) / 2
  • 若两轮均非客场:不计算平均值(返回空值)

现有错误代码

cursor_test.execute("""
     SELECT AVG(score_home) 
         FROM (SELECT score_home
                   FROM Results
                   WHERE team_away=?
                   ORDER BY round DESC
                   LIMIT 2;)
      """,(Team_Away))

示例数据表

idroundteam_hometeam_awayscore_homescore_away
5LiverpoolCHELSEA32
4UnitedCHELSEA01
3LeedsBrighton13
2TottenhamCHELSEA22
1ArsenalFulham20

修正后的代码(适配未来新增轮次)

# 定义需要统计的轮次,未来新增轮次只需修改此列表
target_rounds = (1, 2)
# 生成对应数量的占位符,适配SQL语法
placeholders = ', '.join(['?'] * len(target_rounds))

cursor_test.execute(f"""
    SELECT AVG(score_home)
    FROM Results
    WHERE team_away = ?
      AND round IN ({placeholders})
""", (Team_Away,) + target_rounds)

代码说明

  1. 通过round IN ({placeholders})精准筛选指定轮次的记录,避免了LIMIT带来的错误选取问题;
  2. AVG()函数会自动适配符合条件的记录数:
    • 若有1条符合记录,除数为1;
    • 若有2条符合记录,除数为2;
    • 若无符合记录,返回NULL,即不计算平均值;
  3. 新增轮次时,只需修改target_rounds列表即可,无需改动SQL核心逻辑,满足可扩展性要求。

内容的提问来源于stack exchange,提问作者Evangelos Dellas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 05:46:28