首页 > 解决方案 > 必须使用聚合函数时处理除零

问题描述

我有一个查询,其中按公式选择记录包含除法,这是我的查询:

SELECT
    Id AS [ID]
    IIF(max(c.Capacity) = 0, 0.0,
                   max(TRY_CONVERT(float, f.Value) /
                       TRY_CONVERT(float, c.Capacity))) AS [Value],
FROM Form f 
LEFT JOIN Control c 
ON f.ID = c.FormID
GROUP BY 
    f.Id

我的错误是:

遇到除以零错误

问题是我必须使用Group By它,它要求max()IIF()其中无法过滤掉Capacity = 0。任何人都知道如何解决这个问题?

标签: sqlsql-server

解决方案


假设capacity永远不是负数并且值是某种数字,您可以将逻辑简化为:

COALESCE(MAX(f.Value * 1.0 / NULLIF(c.capacity, 0)), 0) as [Value]

如果这些值已经是数字并且您只是为了避免除以 进行转换0try_convert()则 没有错,但会产生误导。 try_convert()表明转换可能会失败。


推荐阅读