SQL Server中如何仅在计数大于0时返回统计结果?
解决方案
要获取指定日期范围内的总错误记录数,且仅当记录数大于0时返回结果,你可以用以下两种方式实现:
方法1:子查询筛选
先计算符合日期条件的总记录数,再筛选出记录数大于0的结果:
SELECT total_count AS error_count FROM ( SELECT COUNT(*) AS total_count FROM error_info WHERE CONVERT(datetime, created) >= '2022-12-01 10:01:41.000' AND CONVERT(datetime, created) < '2022-12-07 08:59:08.290' ) AS sub WHERE total_count > 0;
方法2:无分组+HAVING过滤
把日期条件放到WHERE子句(先过滤符合条件的行),再通过HAVING直接过滤总计数大于0的情况,无需分组:
SELECT COUNT(*) AS error_count FROM error_info WHERE CONVERT(datetime, created) >= '2022-12-01 10:01:41.000' AND CONVERT(datetime, created) < '2022-12-07 08:59:08.290' HAVING COUNT(*) > 0;
原查询移除GROUP BY报错的原因
你之前把日期条件写在HAVING里,但created列既不是聚合函数也不在GROUP BY中,SQL Server不允许这种非聚合列出现在HAVING却不在分组里的写法。正确逻辑是先用WHERE过滤日期行,再做计数和判断。
内容的提问来源于stack exchange,提问作者Rahul
相关产品推荐
相关产品推荐

