如果不同值的数据少于 15 行,如何在查询中排除它们?

问题描述 投票:0回答:1

我正在 BigQuery 中做一个简单的数据分析项目。共有三列:ID、日期和 TotalMinutesAsleep。如果我想将 ID 保留在至少有 15 天(行)数据的位置,我该怎么做?

我尝试过类似的方法,但如果我不平均 TotalMinutesAsleep 列,这是不可行的。但我不想平均,我想去掉这个表中少于 15 行的不同 ID。

SELECT
  Id,
  date,
  TotalMinutesAsleep
FROM
  `fitbit-data-exploration.FitBit_Tracker.daily sleep 1`
GROUP BY Id
HAVING COUNT(Id) >= 15
sql google-bigquery
1个回答
0
投票

您可以使用子查询来对 Id 进行计数:

SELECT
  Id,
  date,
  TotalMinutesAsleep
FROM
  `fitbit-data-exploration.FitBit_Tracker.daily sleep 1` a
WHERE (SELECT count(*) 
       FROM `fitbit-data-exploration.FitBit_Tracker.daily sleep 1` b
       WHERE b.id=a.id) >= 15

你也可以这样做:

with Step1 as (
SELECT
  Id,
  date,
  TotalMinutesAsleep,
  count(*) over (partition by Id) as Cnt

FROM
  `fitbit-data-exploration.FitBit_Tracker.daily sleep 1`
)
select 
  Id,
  date,
  TotalMinutesAsleep
 from Step1
where Cnt >= 15

或者,正如 @Matbailie 提醒我们的,因为 Bigquery 似乎支持 QUALIFY 子句:

SELECT
  Id,
  date,
  TotalMinutesAsleep
 
FROM
  `fitbit-data-exploration.FitBit_Tracker.daily sleep 1`
QUALIFY count(*) over (partition by Id) >= 15

还有其他方法可以做到这一点,但这些可能会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.