sql - 必须使用聚合函数时处理除零
问题描述
我有一个查询,其中按公式选择记录包含除法,这是我的查询:
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
。任何人都知道如何解决这个问题?
解决方案
假设capacity
永远不是负数并且值是某种数字,您可以将逻辑简化为:
COALESCE(MAX(f.Value * 1.0 / NULLIF(c.capacity, 0)), 0) as [Value]
如果这些值已经是数字并且您只是为了避免除以 进行转换0
,try_convert()
则 没有错,但会产生误导。 try_convert()
表明转换可能会失败。
推荐阅读
- python-3.x - 从arduino读取串行数据:代码有效..重新运行错误
- mysql - 连接表 SQL PHP 中列的 SUM 不起作用
- python - 如何检查一个数字是否可以表示为 x 的 y 次幂?
- javascript - 访问范围内的模型 sequelize
- javascript - 在异步函数中单击时呈现用户姓名和姓氏的问题
- python - 获得 OneClassSVM 分类结果的确定性
- c++ - asio async_receive 如何获取发件人 IP 地址
- postgresql - Postgres 连接失败
- ios - 如何将参数传递给 Metal CIWarpKernel?
- angular - 可以停用 | observable 保持其初始值