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

BigQuery SQL如何按列值前缀分组统计TEST/CONTROL数据

问题原因

你的查询返回6行结果、统计不符合预期,由三处写法错误导致:

  • 匹配语法错误:=是精确匹配操作符,q11="TEST*"只会匹配值完全等于字符串TEST*的记录,无法匹配前缀为TEST的内容。SQL中前缀匹配需要用LIKE操作符,搭配多字符通配符%(你使用的*不是SQL标准通配符,不会生效)。
  • 分组逻辑错误:语句中写了GROUP BY q11,会按照Q11列原始的6个不同取值分别聚合,自然返回6行。要实现两类聚合,需要按照归类后的TEST/CONTROL分组,而非原始Q11字段。
  • 计数逻辑错误:COUNT()会统计所有非NULL值,你在CASE表达式中写了ELSE 0,不符合匹配条件的记录会因为返回0被计入统计,导致计数结果错误。
修正方案

如果需要输出2行统计结果(每行对应一个分组),使用如下语句:

SELECT
  CASE
    WHEN q11 LIKE 'TEST%' THEN 'TEST'
    WHEN q11 LIKE 'CONTROL%' THEN 'CONTROL'
  END AS experiment_group,
  COUNT(1) AS valid_response_count
FROM
  `paid-poc-analytics-0ee3.study_brandlift.response_values`
WHERE
  question_wording = 'Affinity'
  AND VALUES IN ('Love it', 'Like it')
  AND (q11 LIKE 'TEST%' OR q11 LIKE 'CONTROL%')
GROUP BY
  experiment_group

执行后返回结果示例:

experiment_groupvalid_response_count
TEST1234
CONTROL1187

如果你需要将两个分组的统计结果作为两列输出(仅返回1行),可以使用如下写法:

SELECT
  COUNT(CASE WHEN q11 LIKE 'TEST%' THEN 1 END) AS TEST,
  COUNT(CASE WHEN q11 LIKE 'CONTROL%' THEN 1 END) AS CONTROL
FROM
  `paid-poc-analytics-0ee3.study_brandlift.response_values`
WHERE
  question_wording = 'Affinity'
  AND VALUES IN ('Love it', 'Like it')

注意:上述CASE表达式没有写ELSE分支,不符合匹配条件的记录会返回NULL,COUNT会自动忽略NULL值,保证统计结果准确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:57:20