-1
votes

Comment ignorer les nulls dans les fonctions globales (AVG) lors de l'utilisation de plusieurs déclarations de cas

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:

ma requête: xxx

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?

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é?

mise à jour: Mon résultat souhaité: xxx


3 commentaires

Cas expression . (Retourne une valeur.)


Au lieu d'utiliser la fonction avg , vous pouvez somme et diviser par compter () où les valeurs> 0 de cette façon, vous pouvez sauter 0 valeurs


@Marque . . . Votre résultat souhaité n'est pas clair.


3 Réponses :


1
votes

hmmm, je pense que vous devrez peut-être remplacer 0. Le problème avec l'addition, pas la moyenne: xxx pré>

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)))


2 commentaires

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 () - 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 , cela n'affecterait donc pas cela.



2
votes

Vous devez exclure les valeurs de la clause WHERE. Toute opération avec NULLS renvoie NULL. XXX

Je trouve votre table un peu impair. Mais de toute façon, vous pouvez faire une sélection imbriquée. xxx

et ainsi de suite.

Notez que vous voudrez probablement rejoindre la table de requête.


0 commentaires

1
votes

Que diriez-vous d'une croix s'appliquer et de NULLIF ()

fort> p> xxx pré>

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


0 commentaires