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

SQL实现两列球队数据合并统计,生成正确无重复行统计结果

问题:统计各球队已完成赛事数量

需求:从数据表的Team1和Team2两列中提取所有球队名称,统一归入单个TEAM列,统计每个球队参与的已完成赛事数量(Completed=1代表赛事已完成)。

现有数据表数据:

EventTeam1Team2Completed
Ducks vs DevilsDucksDevils1
Ducks vs BruinsDucksBruins1

之前的错误尝试及问题

曾使用CASE WHEN语法尝试实现,但未得到正确结果:

CASE 
WHEN Team1 = "Bruins" or Team2 = "Bruins" then Bruins
WHEN Team1 = "Devils" or Team2 = "Devils" then Devils
WHEN Team1 = "Ducks" or Team2 = "Ducks" then Ducks
ELSE "Other"
END TEAM_CASES

得到的错误统计结果:

TeamTotalCompleted
Bruins1
Devils1
Ducks0

问题核心:CASE WHEN是顺序匹配,仅返回第一个满足条件的结果。比如第一条记录Ducks vs Devils会被第二个分支(Devils的条件)匹配,不会走到Ducks的分支;第二条记录Ducks vs Bruins会被第一个分支(Bruins的条件)匹配,同样不会走到Ducks的分支,最终Ducks的统计数为0,完全不符合预期。

正确解法:拆分列后统计

想要正确统计每个球队的已完成赛事数,需要把每条赛事记录拆成两条——分别对应Team1和Team2的球队,再进行分组统计。使用UNION ALL实现列转行:

SELECT team, SUM(completed) AS Completed
FROM (
    -- 提取Team1列的球队及对应赛事完成状态
    SELECT Team1 AS team, Completed
    FROM your_table_name
    WHERE Completed = 1
    UNION ALL
    -- 提取Team2列的球队及对应赛事完成状态
    SELECT Team2 AS team, Completed
    FROM your_table_name
    WHERE Completed = 1
) AS all_teams
GROUP BY team
ORDER BY team;

说明

  • UNION ALL不会去重,确保每条赛事的两个球队都被计入统计;
  • 内层查询筛选Completed=1,只统计已完成的赛事;
  • 外层通过GROUP BY team分组,用SUM(completed)计算每个球队的已完成赛事总数。

正确统计结果

执行上述SQL后,将得到预期结果:

TeamCompleted
Bruins1
Devils1
Ducks2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 01:52:06