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

如何关联两表并计算每场比赛的主客场得分总和?

问题解决

你的SQL查询存在两个核心问题:

  1. 不必要的聚合函数SUM:每个GameID对应单场比赛的唯一记录,直接计算HomeTeamScore + AwayTeamScore即可得到该场总分,无需用SUM做聚合操作。
  2. GROUP BY子句不符合SQL规范:在多数数据库的严格模式下(比如MySQL的ONLY_FULL_GROUP_BY),SELECT语句中所有非聚合字段必须出现在GROUP BY列表中。你的查询仅以GameID分组,但TeamH.TeamName和TeamA.TeamName未纳入分组条件,会触发语法错误。

正确SQL查询方案

方案一:单条记录对应单场比赛(GameID唯一)

如果GameID是GameScoresTable的主键,直接移除SUM和GROUP BY即可:

SELECT 
    GameScores.GameID,
    TeamH.TeamName AS HomeTeam,
    TeamA.TeamName AS AwayTeam,
    GameScores.HomeTeamScore + GameScores.AwayTeamScore AS TotalScore
FROM GameScoresTable GameScores
    INNER JOIN TeamsTable TeamH ON GameScores.HomeTeam = TeamH.TeamID
    INNER JOIN TeamsTable TeamA ON GameScores.AwayTeam = TeamA.TeamID

方案二:GameID存在重复(同一场比赛有多条记录)

若GameID可能重复,需要保留聚合逻辑时,必须将所有非聚合字段加入GROUP BY:

SELECT 
    GameScores.GameID,
    TeamH.TeamName AS HomeTeam,
    TeamA.TeamName AS AwayTeam,
    SUM(GameScores.HomeTeamScore + GameScores.AwayTeamScore) AS TotalScore
FROM GameScoresTable GameScores
    INNER JOIN TeamsTable TeamH ON GameScores.HomeTeam = TeamH.TeamID
    INNER JOIN TeamsTable TeamA ON GameScores.AwayTeam = TeamA.TeamID
GROUP BY GameScores.GameID, TeamH.TeamName, TeamA.TeamName

两种方案都能实现需求:将外键替换为对应队名,同时计算每场比赛的总分。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 19:51:00