Mysql SQL中除0以外的值的平均值(除0为唯一值)

Mysql SQL中除0以外的值的平均值(除0为唯一值),mysql,sql,Mysql,Sql,我希望AVG从可以包含0的值列表中排除0,除非0是唯一可用的值(或者至少只有一行,值正好是0) 目前我使用 SELECT AVG (NULLIF(feature, 0)) from cluster_density_feat where cluster_id=1; 但如果特征值cluster\u id只有一行且其特征值为0,或者如果此cluster\u id的每一行只有零值,则返回NULL 如何实现这一点?您可以使用WHERE子句来排除0值,如果您想得到0,如果没有0以外的其他值,请使用co

我希望AVG从可以包含0的值列表中排除0,除非0是唯一可用的值(或者至少只有一行,值正好是0)

目前我使用

SELECT AVG (NULLIF(feature, 0)) 
from cluster_density_feat 
where cluster_id=1;
但如果特征值cluster\u id只有一行且其特征值为0,或者如果此cluster\u id的每一行只有零值,则返回NULL


如何实现这一点?

您可以使用WHERE子句来排除0值,如果您想得到0,如果没有0以外的其他值,请使用coalesce来得到0,coalesce是一个函数,如果第一个值不为NULL,它将得到括号之间的第一个值,如果第一个值为NULL,它将返回第二个值

SELECT COALESCE(AVG(feature),0) 
from cluster_density_feat 
where cluster_id=1
AND NOT feature = 0

您可以使用WHERE子句来排除0值,如果您希望在除0之外没有其他值的情况下获得0,请使用coalesce来获得0,coalesce是一个函数,如果第一个值为NULL,则将获得括号之间的第一个值,如果第一个值为NULL,则将返回第二个值

SELECT COALESCE(AVG(feature),0) 
from cluster_density_feat 
where cluster_id=1
AND NOT feature = 0

当功能为0时不包括它

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

当功能为0时不包括它

SELECT AVG(feature)
FROM cluster_density_feat 
WHERE cluster_id = 1
AND feature != 0;
AVG()
使用组中的所有值,它不能排除
0
s。您应该使用
WHERE
子句排除它们

SELECT IFNULL(AVG(feature), 0)
FROM cluster_density_feat 
WHERE cluster_id = 1
   AND feature <> 0
选择IFNULL(平均值(特征),0)
从集群密度专长
其中cluster_id=1
和功能0
如果
feature
列中的所有值都是
0
,则
feature 0
条件产生一组空行,并且
AVG()
返回
NULL
。当第一个参数为
NULL
AVG()
时,函数
IFNULL()
返回其第二个参数,它使用组中的所有值,不能排除
0
s。您应该使用
WHERE
子句排除它们

SELECT IFNULL(AVG(feature), 0)
FROM cluster_density_feat 
WHERE cluster_id = 1
   AND feature <> 0
选择IFNULL(平均值(特征),0)
从集群密度专长
其中cluster_id=1
和功能0
如果
feature
列中的所有值都是
0
,则
feature 0
条件产生一组空行,并且
AVG()
返回
NULL
。函数
IFNULL()
在第一个参数为
NULL
时返回第二个参数