【问题标题】:MySQL: how to get average of positive values only?MySQL:如何仅获得正值的平均值?
【发布时间】:2011-07-07 15:14:10
【问题描述】:

假设我有 INT 列,并且我使用 -1 表示在 INSERT 时没有可用的数据。我想获得该列所有 0 或更大值的 AVG。

这可能吗?

谢谢。


我忘了说我是和其他 AVG 一起做这个的,所以它是 select avg(a), avg(b), avg(d) from tab; ...所以我不能使用 b>0... 因为其他人需要使用行数据,而不管这一列的数据是 -1。

虽然我可以增加 AVG 结果,但我突然想到,例如如果通常是 (4 + 5 + -1 + -1 + 6) / 5。但是如果我知道有多少个 -1,我可以“修复”结果以排除它们。

【问题讨论】:

  • 理想情况下是这样,但数据已经在数据库中了。
  • 你的数据库是一成不变的吗?
  • @Nerfino:如果有人很好地回答了您的问题,请接受回复:)

标签: mysql average


【解决方案1】:

这可能会有所帮助:

如果您想忽略平均值中的 -1 值:

SELECT AVG(`a`), AVG(IF(`b` > -1, `b`, NULL)), AVG(`c`) FROM `t`;

如果要考虑平均值中的 -1 值:

SELECT AVG(`a`), AVG(IF(`b` > -1, `b`, 0)), AVG(`c`) FROM `t`;

我假设了虚拟列名和表名,并假设列 b 是您只想考虑值 >= 0 的列。请根据您的架构随意输入名称。

【讨论】:

    【解决方案2】:
    SELECT AVG(`field`) FROM `table` WHERE `field` >= 0
    

    【讨论】:

    • 应该有>= 0> -1
    • 我忘了说我是和其他 AVG 一起做的,所以它是 select avg(a), avg(b), avg(d) from tab; ...所以我不能使用 field>0.
    • 我不知道 MySQL 中有一个 AVG() 函数,MSSQL 中有类似的东西吗?
    【解决方案3】:

    请使用这个:

    SELECT    AVG(Column),   
     SUM(IF(Column>0))/COUNT(IF(Column>0))
     FROM Table
    

    【讨论】:

    • SELECT AVG(Column), (SELECT AVG(Column) WHERE Column >= 0) as AVG2 ;
    【解决方案4】:

    你能做这样的事吗

    SUM(column) / COUNT(*) as Average FROM 'table' WHERE 'column' >= 0
    

    【讨论】:

    • 如果我能得到行中非负值的数量,我可以很容易地解决这个问题。
    猜你喜欢
    • 2012-03-18
    • 1970-01-01
    • 2022-08-14
    • 2015-09-11
    • 2020-10-11
    • 1970-01-01
    • 1970-01-01
    • 2021-05-30
    相关资源
    最近更新 更多