MS SQL Server 统计分组后所有值均为指定值的组数量
MS SQL Server筛选组内所有指定字段值均为固定值的分组实现方法
核心判断逻辑为:按fruit字段分组后,组内不存在number字段值不等于2139的记录,符合条件的分组返回水果名称及计数1即可。
写法1:MIN/MAX聚合判断(性能最优)
利用最值特性筛选,若分组内number的最小值和最大值均等于2139,说明组内所有值都是2139:
SELECT fruit, 1 AS count FROM 替换为实际表名 GROUP BY fruit HAVING MIN(number) = 2139 AND MAX(number) = 2139
写法2:计数对比判断(逻辑直观)
对比分组总记录数和符合条件的记录数,两者相等则说明所有记录都满足要求:
SELECT fruit, 1 AS count FROM 替换为实际表名 GROUP BY fruit HAVING COUNT(*) = COUNT(CASE WHEN number = 2139 THEN 1 END)
写法3:NOT EXISTS子查询(语义清晰)
直接判断当前水果分组下不存在不符合要求的记录:
SELECT DISTINCT t1.fruit, 1 AS count FROM 替换为实际表名 t1 WHERE NOT EXISTS ( SELECT 1 FROM 替换为实际表名 t2 WHERE t2.fruit = t1.fruit AND t2.number <> 2139 )
以上三种写法均可得到你预期的输出结果,可根据实际表数据量选择合适的方案。
内容的提问来源于stack exchange,提问作者a.WOL7
相关产品推荐
相关产品推荐

