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;
你之前语句的问题分析
- 隐式连接+OR条件导致重复匹配:用
matchs,team加OR连接条件,会让每支球队在参与的每场比赛中被匹配多次,最终求和时重复计算数据。 - CASE WHEN嵌套SUM逻辑错误:你在CASE WHEN里先执行SUM再判断,正确逻辑应该是先对每一条比赛记录判断该球队的进球数,再对所有记录的结果求和。
- 表名与分组字段错误:语句中混用
team和equipe两个表名,且分组字段equipe.Equipes不存在,应改为team.Team_name或team.ID。
内容的提问来源于stack exchange,提问作者undnova
相关产品推荐
相关产品推荐

