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

BigQuery:如何遍历id2值列表并在WHERE子句中使用变量,实现逐个统计id列去重数量

在BigQuery中按指定id2值分组统计唯一id数量

嗨,这个问题其实根本不用搞什么迭代查询,用GROUP BY就能轻松解决!你之前遇到的问题,是因为没给查询做分组,导致所有符合条件的id被揉在一起统计了总数。

基础解决方法:一次查询搞定所有统计

直接筛选出你关心的id2值,再按id2分组,每组单独计算对应id的去重数量,结果和你逐个执行查询完全一致,还高效得多:

SELECT
  id2,
  COUNT(DISTINCT id) AS unique_id_count
FROM t1
WHERE id2 IN ('113', '50')
GROUP BY id2

这个查询会返回两行结果:一行是id2='113'对应的唯一id数量,另一行是id2='50'对应的数量,完美匹配你要的“每个值单独统计”的需求。

进阶:确保所有指定id2都出现在结果里

如果你的需求是哪怕某个id2值在t1里没有对应数据,也要在结果中显示它,且计数为0,可以先构造包含目标id2的临时数据集,再和原表左连接统计:

WITH target_id2 AS (
  SELECT '113' AS id2 UNION ALL
  SELECT '50' AS id2
)
SELECT
  t.id2,
  COUNT(DISTINCT t1.id) AS unique_id_count
FROM target_id2 t
LEFT JOIN t1 ON t.id2 = t1.id2
GROUP BY t.id2

比如如果'50'在t1里没有任何匹配行,结果里也会出现id2='50'且unique_id_count=0的记录,适合需要完整输出指定id2列表的场景。

为什么你之前的写法不对?

你之前用SELECT COUNT(DISTINCT(id)) FROM t1 WHERE id2 IN ('113', '50')得到的是总数,是因为这个查询把所有符合条件的id放在同一个集合里去重统计了——而GROUP BY id2就是告诉BigQuery:把数据按id2拆成一个个独立的小群体,每个群体单独计算统计值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 15:47:31