平均值不计算零

时间:2014-09-15 07:38:23

标签: sql sql-server sql-server-2008

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

SELECT myDate, AVG(CASE myField1 WHEN 0 THEN NULL ELSE myField1 END) AS avgmyField1 
FROM myTable WHERE myDate = '2014-06-01'

在我的语法上,平均计算意味着..将零值设为null。 我的问题是,如果所有值都为零......

谢谢。

3 个答案:

答案 0 :(得分:1)

然后你得到NULL。

如果您想要零,请使用COALESCE:

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

答案 1 :(得分:0)

平均值不会使用nullval来计算平均值

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

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

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

由于排除0,结果为6

答案 2 :(得分:0)

你也可以这样做:

SELECT myDate, COALESCE(AVG(myField1), 0) AS avgmyField1 
FROM myTable WHERE myDate = '2014-06-01' and myField1 <> 0