BigQuery中GROUP BY为何返回过高的用户统计数?
问题原因分析
这两个查询结果差异的核心是对跨日期活跃用户的统计逻辑完全不同:
查询1的逻辑:
- 先按
DATE分组,统计每天的独立用户数(COUNT(DISTINCT user_id)) - 再把每天的用户数相加
这里如果同一个用户在5月内的多个日期都有记录,会被多次计入总和(比如用户A在5月1日和5月2日都有数据,会在5月1日算1次,5月2日再算1次,总和里就会加2)
对应的SQL代码:
SELECT SUM(users) FROM ( SELECT DATE, COUNT(DISTINCT user_id) AS users, FROM `mytable` WHERE DATE BETWEEN ('2022-05-01') AND ('2022-05-31') GROUP BY DATE )结果约140000,这个数值是5月每日独立用户数的总和,包含了跨日期重复的用户。
- 先按
查询2的逻辑:
直接统计整个5月时间段内的唯一独立用户数,不管用户在多少天有记录,都只算1次。对应的SQL代码:
SELECT COUNT(DISTINCT user_id) AS users, FROM `mytable` WHERE DATE BETWEEN ('2022-05-01') AND ('2022-05-31')结果约120000,这个数值是5月的去重总用户数,每个用户仅被统计一次。
简单说,查询1算的是「每日独立用户的累加值」,查询2算的是「整个周期的独立用户数」,两者统计维度不同,结果自然有差异。
内容的提问来源于stack exchange,提问作者Finglish
相关产品推荐
相关产品推荐

