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

如何在BigQuery中筛选出数据行数≥15的ID的全部行

筛选BigQuery中拥有至少15条记录的Id的所有行

你遇到的问题核心是不需要聚合数据,只需要过滤出符合记录数要求的Id对应的所有原始行,原SQL报错是因为GROUP BY Id后,SELECT中的date和TotalMinutesAsleep既不在GROUP BY里也没有聚合函数,不符合SQL语法规范。下面提供两种可行方案:

方案一:使用窗口函数(推荐)

通过窗口函数COUNT() OVER (PARTITION BY Id)计算每个Id的总行数,再筛选出总行数≥15的行,这种方法不需要额外关联,效率较高:

SELECT
  Id,
  date,
  TotalMinutesAsleep
FROM (
  SELECT
    *,
    COUNT(*) OVER (PARTITION BY Id) AS id_row_count
  FROM
    `fitbit-data-exploration.FitBit_Tracker.daily sleep 1`
)
WHERE id_row_count >= 15

方案二:子查询筛选符合条件的Id

先通过子查询找出拥有至少15条记录的Id列表,再用IN或JOIN关联原表获取所有行:

用IN的写法:

SELECT
  Id,
  date,
  TotalMinutesAsleep
FROM
  `fitbit-data-exploration.FitBit_Tracker.daily sleep 1`
WHERE Id IN (
  SELECT Id
  FROM `fitbit-data-exploration.FitBit_Tracker.daily sleep 1`
  GROUP BY Id
  HAVING COUNT(*) >= 15
)

用JOIN的写法:

SELECT
  t.Id,
  t.date,
  t.TotalMinutesAsleep
FROM
  `fitbit-data-exploration.FitBit_Tracker.daily sleep 1` t
JOIN (
  SELECT Id
  FROM `fitbit-data-exploration.FitBit_Tracker.daily sleep 1`
  GROUP BY Id
  HAVING COUNT(*) >= 15
) valid_ids ON t.Id = valid_ids.Id

两种方案都能实现需求,窗口函数的写法更简洁,适合大多数场景;子查询的方式在数据量极大时,有时会有性能优化空间,可以根据实际情况选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 08:32:08