如何关联两表并计算每场比赛的主客场得分总和?
问题解决
你的SQL查询存在两个核心问题:
- 不必要的聚合函数
SUM:每个GameID对应单场比赛的唯一记录,直接计算HomeTeamScore + AwayTeamScore即可得到该场总分,无需用SUM做聚合操作。 - 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
相关产品推荐
相关产品推荐

