【发布时间】:2013-06-29 18:52:44
【问题描述】:
如何获得忽略 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))
【问题讨论】:
-
所有这些
ANDs 意味着您只会获得在所有 3 列中具有非 NULL 值的行。此外,您的NOT NULL检查不是必需的,因为如果Column是NULL,Column<>0的计算结果为UNKNOWN。
标签: sql sql-server tsql sql-server-2008-r2