MySQL中能否统计同一分组内指定数值组合的出现次数?
统计同一ID下同时包含指定数值的记录次数
可以仅通过SQL语句实现需求,下面提供两种高效的解决方案:
方法一:分组聚合 + 条件筛选
这种方法适合需要匹配多个数值的场景,扩展性强(比如要匹配3个数值时只需调整IN和HAVING的条件):
SELECT COUNT(DISTINCT id) AS match_count FROM entries WHERE number IN (0, 9) GROUP BY id HAVING COUNT(DISTINCT number) = 2;
逻辑说明:
- 先筛选出所有
number为目标数值(0或9)的记录 - 按
id分组,统计每个分组内不同number的数量 - 只保留分组内
number数量等于目标数值个数(这里是2)的分组,即该id同时包含所有目标数值 - 最后统计符合条件的
id总数
如果业务上保证同一id下不会重复出现同一个number,可以去掉DISTINCT来提升性能,改为COUNT(number) = 2。
方法二:自连接查询
这种方法逻辑直观,适合仅匹配两个数值的场景:
SELECT COUNT(DISTINCT e1.id) AS match_count FROM entries e1 JOIN entries e2 ON e1.id = e2.id WHERE e1.number = 0 AND e2.number = 9;
逻辑说明:
- 将表自身连接,关联条件为
id相同 - 分别筛选出两个连接表中
number等于目标数值的记录 - 统计满足条件的唯一
id数量,即同时包含两个目标数值的id总数
针对你的示例数据,两种方法都会返回结果2,符合预期。
内容的提问来源于stack exchange,提问作者irrbloss
相关产品推荐
相关产品推荐

