我有一个名为"numbers"的数字mysql数据库字段,其中有10个条目,数字范围为0-10.
我想找到这个的平均值,但不包括number = 0的所有条目.但是我还要计算有多少条目 - 包括number = 0的条目.
所以我不能只添加一个WHERE数字!= 0,因为它在我的COUNT中给出了错误的结果.
所以我需要一些类似的东西.
AVG(if(numbers!=0)) AS average
Run Code Online (Sandbox Code Playgroud)
Del*_*ani 19
这个怎么样?
select avg(nullif(field, 0)) from table;
Run Code Online (Sandbox Code Playgroud)
请注意where,如果您希望将此方法用作较大查询的一部分,并且通常不想排除零值,则此方法不会强制您使用子句.
顺便说一下,avg跳过null值,所以在上面的例子中我们习惯nullif将0值转换为null值.如果您使用null值来表示不应考虑平均值的值(例如,if 0是合法值),那么只需使用avg(field).