基于Games表和Teams表计算各球队总观众数(主场+客场)
计算每支球队的总观众数(主场+客场)
嘿,我来帮你搞定这个需求!要算出每支球队的总观众数,核心就是把球队作为主场时的所有观众数加起来,再加上作为客场时的所有观众数,最后合并到一起。
假设表结构
先默认你的表结构大概是这样的(如果实际字段名有差异,你可以对应调整):
Teams表:包含球队唯一标识team_id和球队名称team_nameGames表:包含比赛IDgame_id、主场球队IDhome_team_id、客场球队IDaway_team_id,以及单场观众数attendance
实现SQL查询
下面这个SQL语句可以完美实现你的需求:
SELECT t.team_name, COALESCE(SUM(g.total_attendance), 0) AS total_attendance FROM Teams t LEFT JOIN ( -- 统计每支球队的主场总观众数 SELECT home_team_id AS team_id, SUM(attendance) AS total_attendance FROM Games GROUP BY home_team_id UNION ALL -- 统计每支球队的客场总观众数 SELECT away_team_id AS team_id, SUM(attendance) AS total_attendance FROM Games GROUP BY away_team_id ) g ON t.team_id = g.team_id GROUP BY t.team_id, t.team_name ORDER BY total_attendance DESC;
代码解释
- 子查询里用
UNION ALL分别统计主场和客场的观众数:这样每支球队如果既打过主场又打过客场,会生成两条记录(一条主场总和,一条客场总和) - 用
LEFT JOIN关联Teams表:确保即使某支球队还没打过任何比赛(既没主场也没客场),也能在结果里显示,并且用COALESCE把NULL值转换成0,避免出现空值 - 最后外层按球队分组求和:把主场和客场的总和加起来,得到最终的总观众数
对应你的示例
比如你提到的:
- 球队A的总观众数是
12+12+3+8:说明A作为主场有两场比赛(观众12、12),作为客场有两场比赛(观众3、8),这个SQL会自动把这两部分加起来得到总和 - 球队B的总观众数是
12+15+3:说明B作为主场有两场(12、15),客场有一场(3),同样会被正确计算
内容的提问来源于stack exchange,提问作者lehtojy1
相关产品推荐
相关产品推荐

