如何统计所有图片状态均为1的人员记录数量
解决方法:统计所有图片状态均为1的人员数量
我来帮你搞定这个问题!你的需求是找出所有图片的status都为1的psqno,然后统计这类人员的数量,而你当前的查询语句并没有排除那些存在status=0的psqno,所以得调整一下写法。
问题分析
你的原始查询select count(distinct psqno) as image_record from users where status = 1会把只要有一张图片status=1的psqno都算进去,但像psqno=1和3这类存在status=0的记录也会被统计,这不符合你的需求。我们需要的是完全没有status=0记录的psqno。
正确的查询方法
这里提供两种可靠的实现方式:
方法1:使用NOT EXISTS子查询
这种方式直接检查每个psqno是否不存在status=0的记录:
SELECT COUNT(DISTINCT psqno) AS image_record FROM users u1 WHERE NOT EXISTS ( SELECT 1 FROM users u2 WHERE u2.psqno = u1.psqno AND u2.status = 0 );
原理:遍历每一条记录对应的psqno,只有当该psqno下没有任何status=0的图片时,才会被纳入统计。
方法2:使用分组+HAVING子句
利用status只有0和1的特性,统计每个psqno的最小status值,如果最小值是1,说明该psqno下所有图片的status都是1:
SELECT COUNT(*) AS image_record FROM ( SELECT psqno FROM users GROUP BY psqno HAVING MIN(status) = 1 ) AS valid_psqnos;
原理:先按psqno分组,筛选出分组内最小status为1的psqno(也就是没有0的分组),再统计这些分组的数量。
结果验证
根据你提供的原始数据,psqno=2和4符合条件,所以上述两个查询都会返回2,和你的期望结果一致。
内容的提问来源于stack exchange,提问作者user3668438
相关产品推荐
相关产品推荐

