2015-06-04 197 views
1

我想让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的每一行都有唯一的零值。

我该如何做到这一点?

回答

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的。当第一个参数为NULL时,函数IFNULL()返回第二个参数。

2

您可以使用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

不包括功能,当它为0

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