计算某些列的平均值,不计算空值

时间:2014-05-19 13:53:57

标签: mysql sql database

我有一张表,其中包含一些如下所示的读数:

id  foo   bar   baz   qux
1   2     4     NULL  3            
2   6     11    0     2

我想计算一些列的平均值,不包括计数中的空值。像这样的伪代码:

select (foo+bar+baz)/countNonNulls(foo,bar,baz) AS result 
  FROM readings WHERE id=1;

即,我的预期结果是(2 + 4)/ 2 = 3.

有没有办法在单个SQL查询中执行此操作?

2 个答案:

答案 0 :(得分:3)

在MySQL中,您可以使用:

select (coalesce(foo, 0) + coalesce(bar, 0) + coalesce(baz, 0) /
        ((foo is not null) + (bar is not null) + (baz is not null))
       ) as average

请注意,这假设至少有一个值不为null,以防止除以0。

要处理一般情况,您可以使用大小写:

select (case when coalesce(foo, bar, bz) is not null
             then (coalesce(foo, 0) + coalesce(bar, 0) + coalesce(baz, 0) /
                   ((foo is not null) + (bar is not null) + (baz is not null))
                  )
        end) as average

答案 1 :(得分:0)

尝试where子句:其中[nameColumn]不为空