J'utilise SQL Server pour trouver la moyenne de certaines colonnes, mais je veux ignorer toute colonne qui a une valeur de 0 ou NULL
table que je lis à partir de: p>
ma requête: p> Lorsque vous utilisez plusieurs expressions de cas à l'intérieur de la fonction AVG (), la colonne renvoie toujours Null. Qu'est-ce que je fais mal? P> mise à jour:
Comme indiqué par @gordon Linoff - il s'agit d'un problème avec l'addition plutôt que la fonction globale. Quelqu'un peut-il suggérer une autre façon d'atteindre le résultat souhaité? P> mise à jour:
Mon résultat souhaité: p>
3 Réponses :
hmmm, je pense que vous devrez peut-être remplacer 0. Le problème avec l'addition, pas la moyenne: si tout est 0 code>, puis utilisez NULLIF () CODE> Pour ignorer ces lignes: P>
(SUM(NULLIF([January-Margin], 0) + SUM(NULLIF([February-Margin], 0))) / (COUNT(NULLIF([January-Margin], 0)) + COUNT(NULLIF([February-Margin], 0)))
Merci mais quand j'entraîne zéro au lieu de NULL comme vous avez suggéré, SQL Server compte le zéro dans le cadre de la moyenne, abaissant la moyenne - qui est ce que je veux éviter
@Marque . . . Pour cela, vous avez besoin de nullif () code> - mais sur toute l'expression, pas les composants. Cependant, vos données d'exemple n'ont pas de lignes dans lesquelles les deux colonnes sont
0 code>, cela n'affecterait donc pas cela.
Vous devez exclure les valeurs de la clause WHERE. Toute opération avec NULLS renvoie NULL. Je trouve votre table un peu impair. Mais de toute façon, vous pouvez faire une sélection imbriquée. P> et ainsi de suite. P> Notez que vous voudrez probablement rejoindre la table de requête. p> p>
Que diriez-vous d'une croix s'appliquer et de NULLIF ()
retour stry> p > January-Margin February-Margin March-Margin AvgMargin
43.111 0.00 0.00 43.111
57.2897 0.00 0.00 57.2897
55.5352 56.8987 0.00 56.2169
Cas expression i>. (Retourne une valeur.)
Au lieu d'utiliser la fonction
avg code>, vous pouvez
somme code> et diviser par
compter () où les valeurs> 0 code> de cette façon, vous pouvez sauter 0 valeurs
@Marque . . . Votre résultat souhaité n'est pas clair.