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

多列GROUP BY不生效:如何统计团队在不同赛事的夺冠次数

问题描述

现有table_results表,数据如下:

Tournament   Team   Round   Placement
41           1      1       1
72           6      2       1
16           8      2       5
33           2      1       4
36           4      1       2
90           1      2       5
33           3      1       1
10           7      1       1
41           1      2       1
72           3      2       2
16           4      2       3
33           1      1       1
72           2      2       3

需求是统计某支队伍(比如Team 1)在不同赛事中获得第一名的次数,不考虑轮次。

编写的SQL语句:

SELECT Team, COUNT(*) from table_results WHERE Team='1' AND Placement='1' GROUP BY Tournament, Team

当前查询结果:

Team   COUNT(*)
1      2
1      1
1      1

期望得到合并后的总数:

Team   COUNT(*)
1      3

已知GROUP BY多列会按顺序分组,但当前查询未合并分组结果计数,请问哪里操作错误?


问题分析与解决

问题出在分组逻辑上:

  • 原SQL按Tournament, Team分组,会把每个「赛事+队伍」的组合单独成组,最终得到的是每个赛事里Team 1拿第一的次数(比如赛事41里有2次第一,赛事33和10各1次),而非拿过第一的不同赛事总数。

要实现需求,核心是先对Tournament去重再计数,有两种简洁的实现方式:

方式1:直接使用COUNT(DISTINCT)

只按Team分组,同时对赛事ID去重后计数:

SELECT Team, COUNT(DISTINCT Tournament) AS first_place_tournaments 
FROM table_results 
WHERE Team='1' AND Placement='1' 
GROUP BY Team;

方式2:子查询去重后再计数

先通过子查询筛选出Team 1拿过第一的所有唯一赛事,再对结果计数:

SELECT Team, COUNT(*) AS first_place_tournaments
FROM (
    SELECT DISTINCT Tournament, Team
    FROM table_results
    WHERE Team='1' AND Placement='1'
) AS unique_tournaments
GROUP BY Team;

两种方式都能得到期望结果:

Team   first_place_tournaments
1      3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 15:22:47