You need to enable JavaScript to run this app. BigQuery使用SQL简便实现按城市、国家统计去重用户数的总计与小计
优惠活动
大模型
产品
解决方案
定价
更多

BigQuery使用SQL简便实现按城市、国家统计去重用户数的总计与小计

BigQuery 分层级去重用户数统计实现方案

核心需求

  • 基于已有的用户行为数据集,在BigQuery环境下用尽可能简便的方案完成分层去重用户统计
  • 数据集包含国家、城市、唯一用户ID三类核心字段
  • 统计范围覆盖三类聚合结果:
    • 全量数据整体去重用户总数
    • 按国家维度聚合的去重用户数小计
    • 按城市维度聚合的去重用户数明细
  • 最终输出为带明确层级的结构化报表,不需要手动拼接多段查询结果

最简实现路径

不用写多段聚合SQL再拼UNION ALL,BigQuery原生支持GROUPING SETS多维聚合语法,单条查询就能出全部分层结果,还只会扫描一次原表,性能比多段拼接好很多。直接跑下面这段就行,把表路径替换成你自己的业务表:

SELECT
  country,
  city,
  COUNT(DISTINCT user_id) AS unique_user_cnt,
  GROUPING_ID(country, city) AS group_level
FROM
  `your_project.your_dataset.your_user_table`
GROUP BY GROUPING SETS (
  -- 全量总计行
  (),
  -- 国家维度小计行
  (country),
  -- 城市维度明细行
  (country, city)
)
-- 按层级排序,输出顺序和常规小计报表一致
ORDER BY group_level, country, city;

结果处理提示

  • 自动生成的group_level字段用来标记行的类型,省得手动判断:
    • 值为3:这行是全量总计,此时country、city字段都是NULL
    • 值为1:这行是对应国家的小计,此时city字段是NULL
    • 值为0:这行是具体城市的明细,两个维度都有真实值
  • 导报表的时候,对着group_level把NULL替换成对应文案就行:比如总计行换成“全量总计”,国家小计行的city列换成“合计”,直接就出来分层小计的效果
  • 后面要加别的层级统计,比如再加个区域维度的小计,只要在GROUPING SETS里加一行对应的分组配置就行,不用重写整个查询

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.07 04:54:08