MySQL平均值排除一些NULL值

时间:2014-04-29 13:45:56

标签: mysql

虽然逻辑很简单,但似乎无法解决这个问题。

我有一个小型MySQL数据库,其中包含以下字段:

  • 各种
  • 拾取
  • 重量

我在MySQL中设置了一个视图来报告每个品种的平均重量是使用SUM(重量)/ SUM(拾取)但是......有时重量不输入,因此我喜欢排除在平均值中选择的总和,以便不给出错误的平均值。

我正在使用:

SELECT variety, if(weight="", sum(weight)/sum(picked),0) As AvgWeight
FROM `harvest`
GROUP BY variety

有人能指出我正确的方向吗?

| picked| weight|
| :---: |  :---:|
|    10 |    20 |
|    10 |    30 |
|    10 |       |

我希望以上结果导致AvgWeight为2.0而不是1.6666667

2 个答案:

答案 0 :(得分:2)

我假设您希望平均值为2.5,而不是2.0。如果是,请使用条件聚合计算平均值:

select variety,
       (sum(case when weight > 0 then weight else 0 end) /
        sum(case when weight > 0 then picked else 0 end)
       ) as average
from harvest
group by variety;

表达式weight > 0将消除NULL值和空值(尽管如果将weight定义为数字类型,则该值不能为空)。

答案 1 :(得分:0)

执行coalesce(weight, 0)

这将为您的比较返回第一个非空整数,并将该行作为计数的一部分返回,而不会弄乱您的最终聚合。