我想让AVG从可以包含它们的值列表中排除0,除非0是唯一可用的值(或者至少只有一行和值正是0)。
目前我使用
SELECT AVG (NULLIF(feature, 0))
from cluster_density_feat
where cluster_id=1;
但如果特征值cluster_id只有一行且其特征值为0或者此cluster_id的每一行只有零值,则返回NULL。
我怎样才能做到这一点?
答案 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;