BigQuery如何合并名称相似行 分组统计指定条件记录数
解决方案
你写的SQL有几个明显错误,直接修正即可:
- 通配符用法错误:BigQuery里
%只能和LIKE搭配做模糊匹配,你写test_control="%test%"是在找内容完全等于%test%的行,根本匹配不到test us、test mom这类值。 - 没有做分组值统一:直接拿原表的
test_control字段分组,会把test、test us、test mom分成三个独立组,没法合并到同一个test分类下。 - 缺少计数聚合:统计符合条件的行数需要用
COUNT()函数,你直接查原values字段拿不到计数,加DISTINCT也是多余的,GROUP BY本身就会对分组字段去重。 - 过滤条件漏了control组:你的WHERE只筛了带test的行,所有control相关的数据都被过滤掉了,自然出不来control的统计值。
可直接运行的正确SQL
先通过CASE WHEN把所有带test/control的行统一归到对应分组,再筛选selected状态、分组计数即可:
SELECT CASE WHEN test_control LIKE '%test%' THEN 'test' WHEN test_control LIKE '%control%' THEN 'control' END AS test_control, COUNT(1) AS `values` FROM `total_union` WHERE values = 'selected' AND (test_control LIKE '%test%' OR test_control LIKE '%control%') GROUP BY 1
说明:按照你提供的样例数据运行上述语句,得到的结果是test组计数1、control组计数3,和你描述的期望数值相反,你可以核对下样例数据或者计数规则是否存在笔误,语句逻辑完全匹配你提出的「按包含test/control归组、仅统计selected记录数」的要求。
内容的提问来源于stack exchange,提问作者abby
相关产品推荐
相关产品推荐

