我有一个名为“numbers”的数字mysql数据库字段,其中有10个条目的数字范围为0-10。
我想找到这个的平均值,但不包括number = 0的所有条目。 但我还要计算有多少条目 - 包括number = 0的条目。
所以我不能只添加一个WHERE数字!= 0,因为这会在我的COUNT中给出错误的结果。
所以我需要这样的东西。
AVG(if(numbers!=0)) AS average
答案 0 :(得分:19)
这个怎么样?
select avg(nullif(field, 0)) from table;
请注意,此方法不会强制您使用where
子句,以防您希望将其用作较大查询的一部分,而您通常不希望排除零值。
顺便说一下,avg
会跳过null
个值,因此在上面的示例中,我们使用nullif
将0
值转换为null
值。如果您使用null
值来表示平均值不应考虑的值(例如,如果0
是合法值),则只需使用avg(field)
。
答案 1 :(得分:0)
SELECT avg(case
when numbers = 0 then null
else numbers
end) as average,
count(*)
FROM your_table
由于NULL值不用于avg(),所以应该这样做。