我有一张表,其中包含一些如下所示的读数:
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查询中执行此操作?
答案 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]不为空