虽然逻辑很简单,但似乎无法解决这个问题。
我有一个小型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
答案 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)
这将为您的比较返回第一个非空整数,并将该行作为计数的一部分返回,而不会弄乱您的最终聚合。