查找每个用户有多少天步数为 0。 HAVING COUNT(x)=0 不返回任何内容

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

我正在使用 Fitbit 的 Kaggle 数据集,用于 Google 数据分析证书项目, 我正在尝试找出每个用户 (

id
) 有多少天 0 步。
db<>fiddle 的演示

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
,但它不起作用。我对其余的整数列也有同样的问题。

sql postgresql group-by having
1个回答
1
投票

HAVING
是分组列上的过滤器,而不是普通列上的过滤器。

尝试

WHERE
条件:
db<>fiddle 的演示

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}
© www.soinside.com 2019 - 2024. All rights reserved.