【问题标题】:Mysql AVG to ignore zeroMysql AVG 忽略零
【发布时间】:2011-07-17 11:41:51
【问题描述】:

我需要对一列执行平均,但我知道该列中的大多数值将为零。在所有可能的行中,只有两个可能具有正值。如何告诉 mySQL 忽略零并仅平均实际值?

【问题讨论】:

    标签: mysql null zero average


    【解决方案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 工作?我想我要吐了……
    猜你喜欢
    • 2013-06-29
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    • 2020-12-10
    • 1970-01-01
    • 1970-01-01
    • 2020-05-19
    • 2019-06-09
    相关资源
    最近更新 更多