Mysql AVG忽略零值

22

我需要在一个列上执行平均操作,但我知道该列中大部分值都为零。在所有可能的行中,只有两个可能具有正值。如何告诉MySQL忽略零并只计算实际值的平均值?

4个回答

99

假设您可能不希望完全排除这些行(也许它们在其他列中有您想聚合的值)

SELECT AVG(NULLIF(field ,0)) 
from table

谢谢,这可能是最好的选择,因为是的,我在其他列中有值! - Oranges13
2
这个非常好用 -- 特别是当你的查询中有多个聚合函数时。 - Avishai
谢谢!我为这个问题挣扎了几分钟。 - CJL89

5
您可以通过 WHERE 子句来控制此操作:
select avg( field ) from table where field > 0

只有在字段大于零的行才是我担心的。不幸的是,在这种情况下,我需要检查其他3列,可能不是这种情况。 - Oranges13

1
select avg(your_column) 
from your_table 
where your_column != 0

这可以运行,但我想同时提取其他字段作为一个大平均值。 - Oranges13

0

您可以将零转换为NULL,然后AVG()函数仅使用非NULL值进行计算。

UPDATE table SET column = NULL WHERE column='0';
SELECT AVG(column) FROM table;

5
天啊,改变现有的数据来使“SELECT”工作?我想我要吐了... - Matthew Clark

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接