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

BigQuery中多条件步数分类查询合并方法咨询

解决健身数据按步数分类合并查询的问题

你之前用UNION ALL出错的核心原因是:UNION ALL要求所有子查询的列数、列位置、数据类型必须完全匹配。你每个子查询只输出对应分类的列,后续子查询的列会被强行对齐到第一个子查询的列名上,导致结果混乱。

下面提供两种正确的实现方式:

方式一:修正UNION ALL的列对齐

每个子查询都输出所有分类列,符合条件的填步数,不符合的填NULL,确保列数和列名一致:

SELECT
  Date,
  Step_count AS very_low_physical_activity,
  NULL AS low_physical_activity,
  NULL AS moderate_physical_activity,
  NULL AS high_physical_activity,
  NULL AS very_high_physical_activity
FROM my-second-project-370721.my_activity_2022.my_activity
WHERE Step_count < 1000

UNION ALL

SELECT
  Date,
  NULL AS very_low_physical_activity,
  Step_count AS low_physical_activity,
  NULL AS moderate_physical_activity,
  NULL AS high_physical_activity,
  NULL AS very_high_physical_activity
FROM my-second-project-370721.my_activity_2022.my_activity
WHERE Step_count BETWEEN 1000 AND 2500

UNION ALL

SELECT
  Date,
  NULL AS very_low_physical_activity,
  NULL AS low_physical_activity,
  Step_count AS moderate_physical_activity,
  NULL AS high_physical_activity,
  NULL AS very_high_physical_activity
FROM my-second-project-370721.my_activity_2022.my_activity
WHERE Step_count BETWEEN 2501 AND 5000

UNION ALL

SELECT
  Date,
  NULL AS very_low_physical_activity,
  NULL AS low_physical_activity,
  NULL AS moderate_physical_activity,
  Step_count AS high_physical_activity,
  NULL AS very_high_physical_activity
FROM my-second-project-370721.my_activity_2022.my_activity
WHERE Step_count BETWEEN 5001 AND 10000

UNION ALL

SELECT
  Date,
  NULL AS very_low_physical_activity,
  NULL AS low_physical_activity,
  NULL AS moderate_physical_activity,
  NULL AS high_physical_activity,
  Step_count AS very_high_physical_activity
FROM my-second-project-370721.my_activity_2022.my_activity
WHERE Step_count > 10000
ORDER BY Date;

这种写法会让每一行数据只在对应分类列显示步数,其他列留空,清晰对应每天的步数所属类别。

方式二:用CASE WHEN实现更高效的分类(推荐)

不需要多次查询表,一次扫描就能完成分类,性能更优:

SELECT
  Date,
  CASE WHEN Step_count < 1000 THEN Step_count ELSE NULL END AS very_low_physical_activity,
  CASE WHEN Step_count BETWEEN 1000 AND 2500 THEN Step_count ELSE NULL END AS low_physical_activity,
  CASE WHEN Step_count BETWEEN 2501 AND 5000 THEN Step_count ELSE NULL END AS moderate_physical_activity,
  CASE WHEN Step_count BETWEEN 5001 AND 10000 THEN Step_count ELSE NULL END AS high_physical_activity,
  CASE WHEN Step_count > 10000 THEN Step_count ELSE NULL END AS very_high_physical_activity
FROM my-second-project-370721.my_activity_2022.my_activity
ORDER BY Date;

如果你的需求是统计每天各分类的天数(而非单条记录的分类),可以用聚合函数改写:

SELECT
  Date,
  COUNT(CASE WHEN Step_count < 1000 THEN 1 END) AS very_low_days,
  COUNT(CASE WHEN Step_count BETWEEN 1000 AND 2500 THEN 1 END) AS low_days,
  COUNT(CASE WHEN Step_count BETWEEN 2501 AND 5000 THEN 1 END) AS moderate_days,
  COUNT(CASE WHEN Step_count BETWEEN 5001 AND 10000 THEN 1 END) AS high_days,
  COUNT(CASE WHEN Step_count > 10000 THEN 1 END) AS very_high_days
FROM my-second-project-370721.my_activity_2022.my_activity
GROUP BY Date
ORDER BY Date;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 02:40:38