我正在使用 Fitbit 的 Kaggle 数据集,用于 Google 数据分析证书项目, 我正在尝试找出每个用户 (
id
) 有多少天 0 步。create table daily_activity_03_04(id,activity_date,totalsteps) as values
('1','2024-10-17'::date,99)
,('1','2024-10-18'::date,0)
,('1','2024-10-19'::date,99)
,('2','2024-10-17'::date,0)
,('2','2024-10-18'::date,0)
,('2','2024-10-19'::date,99)
,('3','2024-10-17'::date,0)
,('3','2024-10-18'::date,0)
,('3','2024-10-19'::date,0);
这是我的询问:
SELECT COUNT (totalsteps), id
FROM daily_activity_03_04
GROUP BY id
HAVING COUNT(totalsteps) =0;
输出是一个没有结果的表格。
id
是 text
,totalsteps
是 integer
。
我不知道我做错了什么或如何解决它。
我使用
CAST
函数将totalsteps
列更改为integer
,但它不起作用。我对其余的整数列也有同样的问题。
HAVING
是分组列上的过滤器,而不是普通列上的过滤器。
尝试
WHERE
条件:SELECT COUNT (totalsteps), id
FROM daily_activity_03_04
WHERE totalsteps = 0
GROUP BY id;
FILTER
行分别进入每个函数,以避免丢弃其他函数仍需要的行:
SELECT id,count(*)
filter(where totalsteps=0) as number_of_days_with_no_steps
,sum(totalsteps) as total_steps
,count(*) as active_days
,array_agg(activity_date)
filter(where totalsteps=0) as dates_with_no_steps
FROM daily_activity_03_04
WHERE activity_date between '2024-10-17' and '2024-10-19'
--AND totalsteps = 0--
GROUP BY id
ORDER BY id;
id | 无步骤的天数 | 总步数 | 活跃天数 | 无步骤的日期 |
---|---|---|---|---|
1 | 1 | 198 | 3 | {2024-10-18} |
2 | 2 | 99 | 3 | {2024-10-17,2024-10-18} |
3 | 3 | 0 | 3 | {2024-10-17,2024-10-18,2024-10-19} |