使用SQL(BigQuery)对转化率列创建分桶仅返回单行问题排查
问题根因
- 你编写的CASE判断逻辑仅覆盖了
30 < 转化率 ≤50的区间,所有转化率≤30、转化率>50的数据都会被ELSE分支统一归类到>50桶中。如果你的Dataset_2中所有转化率都落在≤30或者>50的区间,GROUP BY后自然只会返回>50这一行结果。 - 额外问题:现有查询仅返回分桶名称,没有配套聚合统计逻辑,即使存在多个分桶也无法直观看到每个桶的样本数量。
修正方案
- 补全CASE判断的区间分支,覆盖所有可能的转化率取值范围
- 增加
COUNT(*)聚合函数统计每个分桶的样本数,验证分桶结果合理性
修正后的SQL代码如下:
SELECT buckets, COUNT(*) AS sample_count -- 统计每个桶的样本数量 FROM ( SELECT Conversion__, CASE WHEN Conversion__ <= 30 THEN '0-30' -- 补充低于30的区间 WHEN Conversion__ > 30 AND Conversion__ <=40 THEN '31-40' WHEN Conversion__ > 40 AND Conversion__ <=50 THEN '41-50' ELSE '>50' END AS buckets FROM data_2 ) t2 GROUP BY buckets ORDER BY buckets -- 按分桶顺序排序方便查看
如果运行修正后的代码还是只有>50或其他单个桶返回,可直接查询原表的转化率取值范围验证数据分布:
SELECT MIN(Conversion__) AS min_cvr, MAX(Conversion__) AS max_cvr FROM data_2
内容的提问来源于stack exchange,提问作者D Alam
相关产品推荐
相关产品推荐

