我想让AVG从可包含它们的值列表中除外0,除非0是唯一可用值(或在至少只有一行,值是0)。SQL中除0以外的值的AVG(0除外,仅为值)
目前我使用
SELECT AVG (NULLIF(feature, 0))
from cluster_density_feat
where cluster_id=1;
但如果特征值CLUSTER_ID只有一个排他的特征值是0,或者返回NULL,如果这CLUSTER_ID的每一行都有唯一的零值。
我该如何做到这一点?
我想让AVG从可包含它们的值列表中除外0,除非0是唯一可用值(或在至少只有一行,值是0)。SQL中除0以外的值的AVG(0除外,仅为值)
目前我使用
SELECT AVG (NULLIF(feature, 0))
from cluster_density_feat
where cluster_id=1;
但如果特征值CLUSTER_ID只有一个排他的特征值是0,或者返回NULL,如果这CLUSTER_ID的每一行都有唯一的零值。
我该如何做到这一点?
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
的。当第一个参数为NULL
时,函数IFNULL()
返回第二个参数。
您可以使用WHERE子句排除0值,并且如果您希望在0以外的其他值不是0时使用coalesce以获得0,则COALESCE是一个函数,它将获得第一个值括号,如果它不为空,如果第一个是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;