sql - 如何优化下面的sql查询
问题描述
我有一个后端限制,即十进制类型(aban)的结果列的公式中不能有超过 1000 个字符。
如何优化这个查询?
我曾尝试使用 tempTable,但结果不如预期。
aban =
CASE
WHEN (
sum(isnull(a.callshandled,0)) + sum(isnull(a.totalcallsaband,0)) + sum(isnull(a.incompletecalls,0)) + sum(isnull(a.returnbusy,0)) + sum(isnull(a.returnring,0)) + sum(isnull(a.icrdefaultrouted,0)) + sum(isnull(a.ndr,0)) + sum(isnull(a.overflowout,0)) + sum(isnull(a.callsrona,0)) + sum(isnull(a.returnrelease,0)) + sum(isnull(a.callsroutednonagent,0)) + sum(isnull(a.shortcalls,0)) + sum(isnull(a.agenterrorcount,0)) + sum(isnull(a.errorcount,0))
)
= 0 THEN
0
ELSE (sum(isnull(a.totalcallsaband,0)) * 1.0) / (sum(isnull(a.callshandled,0)) + sum(isnull(a.totalcallsaband,0)) + sum(isnull(a.incompletecalls,0)) + sum(isnull(a.returnbusy,0)) + sum(isnull(a.returnring,0)) + sum(isnull(a.icrdefaultrouted,0)) + sum(isnull(a.networkdefaultrouted,0)) + sum(isnull(a.overflowout,0)) + sum(isnull(a.callsrona,0)) + sum(isnull(a.returnrelease,0)) + sum(isnull(a.callsroutednonagent,0)) + sum(isnull(a.shortcalls,0)) + sum(isnull(a.agenterrorcount,0)) + sum(isnull(a.errorcount,0)))
END
,
优化查询,使公式中的字符数少于 1000,并且结果列在查询优化前后应具有相同的值。
解决方案
请尝试这种方式:
DECLARE @dividend int = 10;
DECLARE @divisor int = 0;
SELECT COALESCE(@dividend / NULLIF(@divisor,0), 0);
因此可以避免除数的重复计算。
推荐阅读
- c++ - c++14中vector.reserve()的意外行为?
- java - 如何计算同一类的两个对象?
- javascript - 在 .html Javascript 循环中使用 Django 视图中的字典(SyntaxError - 意外标记:')
- javascript - 失去对 eventListener 的关注
- python - 根据列表值从数据框中删除行
- python - 使用 python-barcode 尝试生成条形码并收到错误消息:AttributeError: 'function' object has no attribute 'get'
- sql - 仅当另一个表中的所有外键都具有特定状态时如何返回键值(ORACLE)
- python - ufunc 的循环不支持 str 类型的参数 0,它没有可调用的日志方法
- javascript - 使用 javascript 验证邮政编码输入
- java - 如何将 Json 转换为从 Avro Schema 自动生成的 Java 对象