如何编写SQL查询a、b、c指标并验证(a + b)/2 = c是否成立
SQL实现(a+b)/2=c指标校验方案
可以直接在原有查询语句基础上增加计算字段、校验逻辑,既可以全量返回所有数据的校验结果,也可以直接筛选出不符合公式的异常数据。
整数场景无精度误差写法
如果a、b、c三个字段均为整数类型,不存在小数精度问题,可以直接用等号判断:
select a, b, c, (a + b)/2 as 理论c值, case when (a + b)/2 = c then '校验通过' else '校验不通过' end as 校验结果 from table_test where type = 1 and origin not in (10, 20) -- 如果只需要查看异常数据,取消下面一行的注释即可 -- having 校验结果 = '校验不通过'
浮点数场景精度兼容写法(生产环境推荐)
如果三个字段是浮点数、decimal类型(比如金额、比率类指标),直接用等号判断会因为数据库浮点数存储精度问题出现误判,需要设置业务允许的误差阈值做判断:
select a, b, c, (a + b)/2 as 理论c值, abs((a + b)/2 - c) as 实际值与计算值差值, case when abs((a + b)/2 - c) < 0.0001 then '校验通过' else '校验不通过' end as 校验结果 from table_test where type = 1 and origin not in (10, 20) -- 仅查看异常数据取消下面注释即可 -- having 校验结果 = '校验不通过'
误差阈值可以根据业务精度要求调整,比如精确到分的金额字段,阈值设置为0.005即可满足校验需求。
内容的提问来源于stack exchange,提问作者YuboLiang
相关产品推荐
相关产品推荐

