如何统计同时满足两项设置条件的SQL用户数量?
统计同时满足两项设置的用户数
你需要统计同时拥有“通知关闭(Item='20'且Variable='0')”和“深色模式开启(Item='150'且Variable='1')”的用户数量,这里提供几种实用的SQL写法:
方法1:自连接(JOIN)
通过将表与自身连接,匹配同一用户的两项设置条件:
SELECT COUNT(DISTINCT t1.ID) AS user_count FROM your_table t1 JOIN your_table t2 ON t1.ID = t2.ID WHERE t1.Item = '20' AND t1.Variable = '0' AND t2.Item = '150' AND t2.Variable = '1';
- 替换
your_table为你的实际表名 DISTINCT用于避免同一用户因重复记录被多次计数
方法2:分组聚合(GROUP BY + HAVING)
先筛选出符合任一条件的记录,按用户分组后筛选出同时满足两项条件的用户:
SELECT COUNT(ID) AS user_count FROM ( SELECT ID FROM your_table WHERE (Item = '20' AND Variable = '0') OR (Item = '150' AND Variable = '1') GROUP BY ID HAVING COUNT(DISTINCT Item) = 2 ) AS filtered_users;
- 内层查询先获取满足单个条件的用户,分组后通过
HAVING确保用户同时拥有两项不同的设置 - 如果每个用户每个
Item只有一条记录,DISTINCT可以省略
方法3:子查询(EXISTS)
检查满足第一个条件的用户是否存在对应的第二个条件记录:
SELECT COUNT(DISTINCT ID) AS user_count FROM your_table t1 WHERE t1.Item = '20' AND t1.Variable = '0' AND EXISTS ( SELECT 1 FROM your_table t2 WHERE t2.ID = t1.ID AND t2.Item = '150' AND t2.Variable = '1' );
- 这种写法在表有
(ID, Item, Variable)联合索引时,查询效率会很高
内容的提问来源于stack exchange,提问作者CapsaCool
相关产品推荐
相关产品推荐

