Mysql AVG 忽略零
Posted
技术标签:
【中文标题】Mysql AVG 忽略零【英文标题】:Mysql AVG to ignore zero 【发布时间】:2011-07-17 11:41:51 【问题描述】:我需要对一列执行平均,但我知道该列中的大多数值将为零。在所有可能的行中,只有两个可能具有正值。如何告诉 mysql 忽略零并仅平均实际值?
【问题讨论】:
【参考方案1】:假设您可能不希望完全排除此类行(也许它们在您要聚合的其他列中具有值)
SELECT AVG(NULLIF(field ,0))
from table
【讨论】:
谢谢,这可能是最好的选择,因为是的,我在其他列中确实有值! 这很好用——尤其是当您的查询中有超过 1 个聚合函数时 谢谢!我在这个问题上挣扎了几分钟。【参考方案2】:您可能可以通过 WHERE 子句控制它:
select avg( field ) from table where field > 0
【讨论】:
只有当字段大于零的行是我担心的行。不幸的是,在这种情况下,我需要检查其他 3 列可能不是这种情况的列。【参考方案3】:select avg(your_column)
from your_table
where your_column != 0
【讨论】:
这行得通,除了我希望同时提取其他字段作为一个大平均值。【参考方案4】:您可以将零转换为NULL
,然后AVG()
函数将仅适用于非NULL
值。
UPDATE table SET column = NULL WHERE column='0';
SELECT AVG(column) FROM table;
【讨论】:
是的。更改现有数据以使SELECT
工作?我想我要吐了……以上是关于Mysql AVG 忽略零的主要内容,如果未能解决你的问题,请参考以下文章
LINQ Group使用Lambda通过两个对象属性和SUM,AVG或忽略其他对象属性
Prometheus 查询计算 avg_over_time up-time,但想忽略 down-time 小于 1 分钟