如何获取忽略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是否没有连接条件,所以从我的答案中省略了它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。