我正在 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
您可以使用子查询来对 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
还有其他方法可以做到这一点,但这些可能会有所帮助。