MySQL查询需求:统计t_matches表中各球队总积分
统计各球队总积分的MySQL查询方案
嗨,别担心,我来帮你搞定这个球队积分统计的查询语句!
咱们的核心思路是:每个球队既可能作为fk_team1参赛,也可能作为fk_team2参赛,所以得把这两种情况的积分分别算出来,再合并求和。另外,为了确保**所有球队(哪怕没参加任何比赛的)**都能出现在结果里,咱们还要和t_teams表关联起来。
直接上查询语句:
SELECT t.team, COALESCE(SUM(m.points), 0) AS points FROM t_teams t LEFT JOIN ( -- 统计球队作为team1时的积分 SELECT fk_team1 AS team_id, points_team1 AS points FROM t_matches UNION ALL -- 统计球队作为team2时的积分 SELECT fk_team2 AS team_id, points_team2 AS points FROM t_matches ) m ON t.team = m.team_id GROUP BY t.team ORDER BY points DESC;
关键部分说明:
- 内层的
UNION ALL把两类记录合并:一类是球队作为主队(fk_team1)获得的积分,另一类是作为客队(fk_team2)获得的积分,这样每个球队的所有参赛积分都被完整提取。 LEFT JOIN t_teams确保即使球队没有任何比赛记录,也会出现在结果列表中,不会被遗漏。COALESCE(SUM(m.points), 0)将无比赛球队的积分从默认的NULL转换为0,结果展示更友好。- 最后通过
ORDER BY points DESC按积分降序排列,方便快速查看球队排名。
补充说明:如果t_matches的外键fk_team1、fk_team2存储的是球队ID(而非球队名称),只需将语句中t.team = m.team_id替换为对应的ID字段匹配即可(比如t.team_id = m.team_id)。
内容的提问来源于stack exchange,提问作者user9607767
相关产品推荐
相关产品推荐

