使用AVG时排除“0”条目

时间:2011-07-29 10:28:46

标签: mysql

我有一个名为“numbers”的数字mysql数据库字段,其中有10个条目的数字范围为0-10。

我想找到这个的平均值,但不包括number = 0的所有条目。 但我还要计算有多少条目 - 包括number = 0的条目。

所以我不能只添加一个WHERE数字!= 0,因为这会在我的COUNT中给出错误的结果。

所以我需要这样的东西。

AVG(if(numbers!=0)) AS average

2 个答案:

答案 0 :(得分:19)

这个怎么样?

select avg(nullif(field, 0)) from table;

请注意,此方法不会强制您使用where子句,以防您希望将其用作较大查询的一部分,而您通常不希望排除零值。

顺便说一下,avg会跳过null个值,因此在上面的示例中,我们使用nullif0值转换为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(),所以应该这样做。