You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL查询使用HAVING MAX<>SUM条件过滤失效问题排查

问题根因

HAVING子句过滤失效的核心原因是浮点数精度误差:

  • 你表中ExpenditureComplete字段为Float类型,Float属于近似数值类型,存储、运算过程中都会产生微小的精度偏差。肉眼看起来完全相等的两个数值,底层存储的二进制值可能存在可被运算识别的微小差异,直接用<>判断就会出现不符合预期的结果。

修复方案

  1. 从根源解决:如果业务允许修改表结构,把ExpenditureComplete字段从Float替换为精确数值类型,例如SQL Server/MySQL中的DECIMAL类型,按需指定精度和小数位,彻底避免浮点数精度问题。
  2. 临时兼容处理:如果暂时无法修改表结构,调整HAVING子句的判断逻辑,改为校验两个值的差值绝对值是否小于业务可接受的最小误差阈值,示例如下:
-- 示例默认业务可接受的最小精度为0.001,可根据实际场景调整阈值
HAVING ABS(MAX(a.ExpenditureComplete) - SUM(b.DurationHour)) > 0.001

额外优化提示

你的查询逻辑中已经配置了a.ID = b.MainTable_ID的关联条件,GROUP BY子句中同时写a.ID和b.MainTable_ID属于冗余配置,保留任意一个即可正常运行,可简化代码。

内容的提问来源于stack exchange,提问作者Mick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 22:51:04