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

MySQL查询:关联外键与主键统计球队总进球数

解决方案

正确SQL语句(两种实现方式)

方式1:拆分主客场记录后求和

先把每场比赛的主客场进球拆分为独立记录,再关联球队表统计总和:

SELECT t.Team_name, SUM(goals) AS Team_goals
FROM Team t
JOIN (
    -- 提取主场球队的进球记录
    SELECT ID_team_home AS team_id, goal_team_home AS goals FROM Matchs
    UNION ALL
    -- 提取客场球队的进球记录
    SELECT ID_team_away AS team_id, goal_team_away AS goals FROM Matchs
) AS team_goals ON t.ID = team_goals.team_id
GROUP BY t.Team_name
ORDER BY t.Team_name;

方式2:通过CASE WHEN直接计算单条记录中球队的进球

在SUM函数内通过CASE WHEN判断当前比赛中该球队是主场还是客场,累加对应进球数:

SELECT t.Team_name,
       SUM(
           -- 累加主场进球
           CASE WHEN m.ID_team_home = t.ID THEN m.goal_team_home ELSE 0 END
           -- 累加客场进球
           + CASE WHEN m.ID_team_away = t.ID THEN m.goal_team_away ELSE 0 END
       ) AS Team_goals
FROM Team t
LEFT JOIN Matchs m ON t.ID IN (m.ID_team_home, m.ID_team_away)
GROUP BY t.Team_name
ORDER BY t.Team_name;

你之前语句的问题分析

  1. 隐式连接+OR条件导致重复匹配:用matchs,team加OR连接条件,会让每支球队在参与的每场比赛中被匹配多次,最终求和时重复计算数据。
  2. CASE WHEN嵌套SUM逻辑错误:你在CASE WHEN里先执行SUM再判断,正确逻辑应该是先对每一条比赛记录判断该球队的进球数,再对所有记录的结果求和。
  3. 表名与分组字段错误:语句中混用team和equipe两个表名,且分组字段equipe.Equipes不存在,应改为team.Team_name或team.ID。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 11:20:54