如何统计各distinct UserID的loggedIn为Yes的次数(含0值记录)
统计各用户loggedIn为Yes的记录次数(含无符合记录用户)
需求说明
需要统计每个唯一Userid对应的loggedIn值为Yes(不区分大小写)的记录次数,要求包含所有用户,无符合记录的用户次数显示为0。
原始数据
Userid loggedIn ---- ----- 1 Yes 1 yes 1 No 2 Yes 2 No 3 No 4 yes 5 yes 1 No
期望输出
Userid Count ---- ----- 1 2 2 1 3 0 4 1 5 1
解决方案
可以通过SQL的GROUP BY结合条件统计函数实现,以下提供两种常用写法:
写法一:SUM + CASE WHEN
SELECT Userid, SUM(CASE WHEN LOWER(loggedIn) = 'yes' THEN 1 ELSE 0 END) AS Count FROM your_table_name -- 替换为你的实际表名 GROUP BY Userid ORDER BY Userid;
写法二:COUNT + CASE WHEN
SELECT Userid, COUNT(CASE WHEN LOWER(loggedIn) = 'yes' THEN 1 END) AS Count FROM your_table_name -- 替换为你的实际表名 GROUP BY Userid ORDER BY Userid;
关键说明
LOWER(loggedIn) = 'yes':统一转换为小写判断,兼容Yes/yes等不同大小写的情况- 两种写法核心逻辑一致:对每个用户的记录做条件判断,统计符合要求的数量,无符合记录时自动返回0
GROUP BY Userid确保每个用户仅返回一行统计结果,ORDER BY Userid让结果按用户ID排序,与期望输出一致
内容的提问来源于stack exchange,提问作者anonymous
相关产品推荐
相关产品推荐

