除了0之外的值的AVG(除了0只是值)在SQL中

时间:2015-06-04 09:17:19

标签: mysql sql

我想让AVG从可以包含它们的值列表中排除0,除非0是唯一可用的值(或者至少只有一行和值正是0)。

目前我使用

SELECT AVG (NULLIF(feature, 0)) 
from cluster_density_feat 
where cluster_id=1;

但如果特征值cluster_id只有一行且其特征值为0或者此cluster_id的每一行只有零值,则返回NULL。

我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:3)

AVG()使用该组中的所有值,但不能排除0。您应该使用WHERE子句排除它们。

SELECT IFNULL(AVG(feature), 0)
FROM cluster_density_feat 
WHERE cluster_id = 1
   AND feature <> 0

如果feature列中的所有值均为0,则feature <> 0条件会生成一组空行,AVG()会返回NULL。当第一个参数为IFNULL()时,函数NULL将返回其第二个参数。

答案 1 :(得分:2)

您可以使用WHERE子句排除0值,如果您想要获得0,如果没有其他值超过0使用coalesce得到0,则COALESCE是一个函数,它将获得括号之间的第一个值如果它不是NULL并且如果第一个值为NULL则返回第二个值

Square

答案 2 :(得分:0)

当它为0时不要包含功能。

SELECT AVG(feature)
FROM cluster_density_feat 
WHERE cluster_id = 1
AND feature != 0;