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

SQL统计特定值与求和:如何使用GROUP BY计算球队比赛数据

用GROUP BY统计球队比赛数据的解决方案

嘿,我明白你想统计每个球队的参赛场次、总得分这类数据的需求,而且已经知道GROUP BY是关键,但不知道怎么结合你的表结构来用——毕竟你的RECORD表里每个比赛有两个球队,得先把数据整理成适合GROUP BY的格式才行!

先理清数据结构问题

你的RECORD表每一行是一场比赛,每个球队可能出现在MATCH_A或MATCH_B列里,对应的得分分别是A_SCORE和B_SCORE。所以第一步得把这两列的球队数据“拆”成一列,这样才能统一统计每个球队的所有比赛记录。

具体SQL实现

下面的SQL会先通过UNION ALL把每场比赛的两个球队拆成独立行,再用GROUP BY按球队ID分组统计:

-- 先拆分比赛记录,把每个球队的每场比赛单独成行
WITH TeamMatches AS (
    SELECT 
        MATCH_A AS TeamID,
        A_SCORE AS TeamScore,
        B_SCORE AS OpponentScore
    FROM RECORD
    UNION ALL
    SELECT 
        MATCH_B AS TeamID,
        B_SCORE AS TeamScore,
        A_SCORE AS OpponentScore
    FROM RECORD
)
-- 分组统计每个球队的比赛数据
SELECT 
    t.TeamID,
    t.TeamName,
    COUNT(*) AS TotalMatches, -- 总参赛场次
    SUM(tm.TeamScore) AS TotalScore, -- 总得分
    SUM(tm.OpponentScore) AS TotalConceded -- 总失分
FROM TeamMatches tm
JOIN TEAM t ON tm.TeamID = t.TeamID
GROUP BY t.TeamID, t.TeamName
ORDER BY t.TeamID;

代码解释

  • CTE TeamMatches:用UNION ALL把每场比赛拆成两条记录——一条是主队(MATCH_A)的得分和失分,一条是客队(MATCH_B)的得分和失分,这样每个球队的所有参赛记录都被统一整理到了TeamID列下。
  • GROUP BY部分:按TeamID和TeamName分组(因为TeamName和TeamID是一一对应的,所以可以一起分组),然后用COUNT(*)统计总场次,SUM()计算总得分和总失分。
  • JOIN TEAM表:关联TEAM表来获取球队名称,让结果更直观。

验证你的例子

比如球队1(Apes),在RECORD表里的参赛记录有:

  • 3/1 作为MATCH_A对阵3号球队
  • 4/1 作为MATCH_A对阵9号球队
  • 7/1 作为MATCH_B对阵4号球队
    总共3场,运行上面的SQL后,TotalMatches列对应球队1的值就是3,完全符合你的描述~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:38:43