Sql 不计算零的平均值

Sql 不计算零的平均值,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,表中有一些字段,需要对这些字段求平均值。 然后我运行这个语法,因为我不想计算0(零)值 按照我的语法,平均计算意味着。。将零值设为null。 我的问题是,如果所有的值都是零,怎么办 谢谢。那么您将得到空值 如果希望为零,请使用合并: COALESCE( AVG(CASE myField1 WHEN 0 THEN NULL ELSE myField1 END) , 0) Average不会使用NullValue来计算平均值 IsNull或Coalesce可用于将null值更改为不同的值 此脚本将

表中有一些字段,需要对这些字段求平均值。 然后我运行这个语法,因为我不想计算0(零)值

按照我的语法,平均计算意味着。。将零值设为null。 我的问题是,如果所有的值都是零,怎么办

谢谢。

那么您将得到空值

如果希望为零,请使用合并:

COALESCE( AVG(CASE myField1 WHEN 0 THEN NULL ELSE myField1 END) , 0)

Average不会使用NullValue来计算平均值

IsNull或Coalesce可用于将null值更改为不同的值

此脚本将0更改为null并取平均值:

SELECT IsNull(AVG(NullIf(val,0)), 0) 
FROM 
  (Values(5),(7),(0)) tbl(val)

由于排除了0,因此结果为6,您也可以这样做:

SELECT myDate, COALESCE(AVG(myField1), 0) AS avgmyField1 
FROM myTable WHERE myDate = '2014-06-01' and myField1 <> 0
选择myDate,合并(平均值(myField1),0)作为avgmyField1
来自myTable,其中myDate='2014-06-01'和myField1 0

QA不想用0计算值,这并不意味着QA想排除这些行
SELECT myDate, COALESCE(AVG(myField1), 0) AS avgmyField1 
FROM myTable WHERE myDate = '2014-06-01' and myField1 <> 0