我有一个名为“numbers”的数字mysql数据库字段,其中有10个条目的数字范围是0-10。当使用AVG时排除带“0”的条目
我想找到的这个平均水平,但不包括所有条目,其中number = 0 但我也想看看有多少项有 - 包括那些其中number = 0
所以我不能只添加一个WHERE数字!= 0,因为这会给COUNT一个错误的结果。
所以我需要类似的东西。
AVG(if(numbers!=0)) AS average
我有一个名为“numbers”的数字mysql数据库字段,其中有10个条目的数字范围是0-10。当使用AVG时排除带“0”的条目
我想找到的这个平均水平,但不包括所有条目,其中number = 0 但我也想看看有多少项有 - 包括那些其中number = 0
所以我不能只添加一个WHERE数字!= 0,因为这会给COUNT一个错误的结果。
所以我需要类似的东西。
AVG(if(numbers!=0)) AS average
这个怎么样?
select avg(nullif(field, 0)) from table;
注意这种方法并如何不会强迫你使用where
条款,如果你想用这个作为一个大的查询,你不想在一般排除零个值的一部分。
另外,顺便说一下,avg
跳过null
值,因此在上面的例子中,我们使用nullif
转0
值到null
值。如果使用null
值来表示平均值不应考虑的值(例如,如果0
是合法值),则只需使用avg(field)
。
SELECT avg(case
when numbers = 0 then null
else numbers
end) as average,
count(*)
FROM your_table
由于NULL值不用于avg(),所以应该这样做。
你需要2个选择。 – Rufinus