统计含指定字符串行数并聚合:按用户统计点赞/关注活动数
修正后的用户行为统计SQL
嘿,我注意到你想统计每个用户的「功能点赞」和「功能关注」次数,但当前的查询语句可能没法得到预期结果——因为count()函数会统计所有非NULL的值,哪怕是0也会被算进去,这样最后得到的其实是每个用户的总活动数,而不是符合条件的次数。
正确的查询语句
我们可以用SUM()配合CASE WHEN来实现精确统计,这个写法在所有SQL数据库中都通用:
SELECT USER, SUM(CASE WHEN Activity LIKE '%liked%' THEN 1 ELSE 0 END) AS LikedActivity, SUM(CASE WHEN Activity LIKE '%followed%' THEN 1 ELSE 0 END) AS FollowedActivity FROM db.Table GROUP BY USER;
如果你的数据库支持布尔值直接转换为数值(比如MySQL、PostgreSQL),也可以简化成更简洁的写法:
SELECT USER, SUM(Activity LIKE '%liked%') AS LikedActivity, SUM(Activity LIKE '%followed%') AS FollowedActivity FROM db.Table GROUP BY USER;
为什么原来的写法不对?
原来的count(Activity LIKE '%liked%')中,Activity LIKE '%liked%'会返回TRUE或FALSE(对应数值1或0),但这两个值都不是NULL,所以count()会把每一行都计入统计,结果就变成了每个用户的总活动次数,而不是我们想要的点赞/关注次数。
测试你的示例数据
用你给出的3条数据测试正确语句,会得到如下结果:
| USER | LikedActivity | FollowedActivity |
|---|---|---|
| User1 | 2 | 0 |
| User2 | 0 | 1 |
内容的提问来源于stack exchange,提问作者scorpion5211
相关产品推荐
相关产品推荐

