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

为何在GROUP BY中添加列会使SUM()的结果增大?

为什么GROUP BY添加列后sum(count(distinct ID))的结果会变大?

嘿,这个问题的核心是分组粒度的变化对count(distinct)统计逻辑的影响,咱们结合你的例子一步步拆解清楚:

首先从你给出的结果反推,你的table1里应该存在这样的情况:同一个日期+ID组合,对应了不同的Column2值——比如某一天里,ID=1既出现在Column2=Yes的记录里,也出现在Column2=No的记录里。

第一个查询的执行逻辑

你执行的第一个语句:

select date, sum(Result_of_count) 
from (select date, count(distinct ID) as Result_of_count from table1 group by date) 
group by date

这里子查询的分组粒度是仅按date:

  • 对于每个日期,不管Column2是什么,只统计这个日期下所有不同ID的数量(每个ID在该日期下只被计数一次)
  • 外层sum把每个日期的计数值加总,最终得到10。

第二个查询的执行逻辑

当你在子查询的GROUP BY中添加column2后,语句变成:

select date, sum(Result_of_count) 
from (select date, column2, count(distinct ID) as Result_of_count from table1 group by date, column2) 
group by date

这里子查询的分组粒度变成了**date + column2的组合**:

  • 对于每个日期+Column2的分组,统计该分组下不同ID的数量
  • 如果同一个ID在同一个日期的不同Column2分组里都有记录,这个ID会在每个对应的分组里各被计数一次(比如ID=1在2022-01-01的Yes分组里计1,No分组里也计1)
  • 外层sum把这些分组的计数值全部加起来,自然就会比第一个查询的结果大——因为原本在单个日期里只被计一次的ID,现在被拆分到多个Column2分组里重复计数了。

举个更具体的小例子帮助理解:
假设table1里有如下记录:

DateIDColumn2
01-01-20221Yes
01-01-20221No
01-01-20222Yes

第一个子查询group by date的结果是:

Datecount(distinct ID)
01-01-20222

sum后这部分是2。

第二个子查询group by date, column2的结果是:

DateColumn2count(distinct ID)
01-01-2022Yes2
01-01-2022No1

sum后这部分是2+1=3,比第一个结果多了1——原因就是ID=1在Yes和No两个分组里各被计了一次,被重复加总了。

回到你的例子,结果从10变成13,说明有3次这样的重复计数情况(比如3个ID在同一个日期的不同Column2分组里被分别计数)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 21:37:32