首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >除以两列,但避免除以零

问除以两列,但避免除以零
EN

Stack Overflow用户
提问于 2018-11-28 10:36:23
回答 6查看 860关注 0票数 1

我想用一个连接日志表做这样的事情:

代码语言:javascript
复制
SELECT StartTime, EndTime, EventTime, SentBytes, SentObjects, \
    SentBytes/SentObjects AS bytes_per_object, \
    SentBytes/(EndTime - StartTime) AS bitrate, \
    (EndTime - StartTime) AS duration FROM [table];

但是在某些情况下,StartTime和EndTime可以是相等的(零持续时间),或者SentObjects可以是零。因此,上面的查询给出了零错误除法。如何重写语句以获得结果?用-1代替零除法是很好的。

我在想类似于三元运算的东西,但我不知道怎么写:

代码语言:javascript
复制
SELECT IFF(SentObjects > 0, SentBytes/SentObjects, -1) AS bytes_per_object FROM table;

SELECT .... WHERE SentObjects > 0不是一个理想的解决方案,因为我希望在一个列表中看到所有的连接。

Server版本10_50

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2018-11-28 10:41:07

代码语言:javascript
复制
SELECT StartTime, EndTime, EventTime, SentBytes, SentObjects, \
    SentBytes/SentObjects AS bytes_per_object, \
    isNull(SentBytes/nullif((EndTime - StartTime), 0), -1) AS bitrate, \
    (EndTime - StartTime) AS duration FROM [table];
票数 0
EN

Stack Overflow用户

发布于 2018-11-28 10:39:20

代码语言:javascript
复制
 select 1/nullif(0,0)

SELECT StartTime, EndTime, EventTime, SentBytes, SentObjects,  
    coalesce(SentBytes/NULLIF(SentObjects,0),-1) AS bytes_per_object,  
    coalesce(SentBytes/NULLIF((EndTime - StartTime),0),-1) AS bitrate,  
    (EndTime - StartTime) AS duration FROM [table] 

您可以使用以下函数避免零

票数 1
EN

Stack Overflow用户

发布于 2018-11-28 10:51:33

代码语言:javascript
复制
SELECT StartTime, EndTime, EventTime, SentBytes, SentObjects,
    SentBytes/(case when isnull(SentObjects, 0) = 0 then -1 else SentObjects end) AS bytes_per_object,
    SentBytes/(case when isnull((EndTime - StartTime), 0) = 0 then -1 else (EndTime - StartTime)end) AS bitrate,
    (EndTime - StartTime) AS duration FROM [table];
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53517424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档