统计Fitbit数据中各用户0步数天数失败:HAVING COUNT(x)=0无结果
问题分析与解决方法
错误原因
你当前的查询语句逻辑存在问题:
COUNT(totalsteps)统计的是每个用户的总有效记录条数(非NULL的totalsteps记录数),而非步数为0的天数。- 你的测试数据中每个用户都有3条记录,因此
COUNT(totalsteps)的结果均为3,HAVING COUNT(totalsteps) = 0的条件永远无法满足,所以返回无结果。
正确查询语句
方法1:仅统计有0步数记录的用户
SELECT id, COUNT(*) AS zero_step_days FROM daily_activity_03_04 WHERE totalsteps = 0 GROUP BY id;
该语句先筛选出所有步数为0的记录,再按用户id分组统计数量,直接得到每个用户的0步数天数。
方法2:统计所有用户的0步数天数(含无0步数的用户)
如果需要保留所有用户(即使该用户没有0步数的日子),可以使用条件求和:
SELECT id, SUM(CASE WHEN totalsteps = 0 THEN 1 ELSE 0 END) AS zero_step_days FROM daily_activity_03_04 GROUP BY id;
此方法会为每个用户计算步数为0的天数,没有0步数的用户会显示0。
测试数据验证结果
针对你提供的测试表,执行正确语句后会得到:
- 用户1的0步数天数为1
- 用户2的0步数天数为2
- 用户3的0步数天数为3
内容的提问来源于stack exchange,提问作者Hazael Diaz Bernal
相关产品推荐
相关产品推荐

