加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 获取AVG忽略空值或零值

发布时间:2020-12-12 07:05:38 所属栏目:MsSql教程 来源:网络整理
导读:如何获取忽略NULL和零值的列的AVG? 我有三列可以得到他们的平均值,我尝试使用以下脚本: SELECT distinct AVG(cast(ISNULL(a.SecurityW,0) as bigint)) as Average1,AVG(cast(ISNULL(a.TransferW,0) as bigint)) as Average2,AVG(cast(ISNULL(a.StaffW,0) a
如何获取忽略NULL和零值的列的AVG?

我有三列可以得到他们的平均值,我尝试使用以下脚本:

SELECT distinct
     AVG(cast(ISNULL(a.SecurityW,0) as bigint)) as Average1,AVG(cast(ISNULL(a.TransferW,0) as bigint)) as Average2,AVG(cast(ISNULL(a.StaffW,0) as bigint)) as Average3
FROM Table1 a,Table2 b
WHERE a.SecurityW <> 0 AND a.SecurityW IS NOT NULL
AND a.TransferW<> 0 AND a.TransferWIS NOT NULL
AND a.StaffW<> 0 AND a.StaffWIS NOT NULL
AND MONTH(a.ActualTime) = 4
AND YEAR(a.ActualTime) = 2013

我没有得到任何结果,但是这三列的值包括NULL和零!

有没有排除空值获得平均值之前?

示例:AVERAGE(NOTNULL(SecurityW))

解决方法

NULL已被忽略,因此您可以使用NULLIF将0变为NULL。此外,您不需要DISTINCT,并且您在ActualTime上的WHERE不可用。
SELECT AVG(cast(NULLIF(a.SecurityW,0) AS BIGINT)) AS Average1,AVG(cast(NULLIF(a.TransferW,0) AS BIGINT)) AS Average2,AVG(cast(NULLIF(a.StaffW,0) AS BIGINT))    AS Average3
FROM   Table1 a
WHERE  a.ActualTime >= '20130401'
       AND a.ActualTime < '20130501'

PS我不知道原始查询中的Table2 b是否没有连接条件,所以从我的答案中省略了它。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读