Propriété de fonction Count avec NULL dans SQL Server

  • Pourquoi SELECT COUNT(1+NULL) renvoie 0 même si SELECT 1+NULL renvoie NULL
  • Relativement pourquoi SELECT COUNT(NULL) renvoie un message d'erreur Operand data type void type is invalid for count operator même si SELECT NULL renvoie NULL

Besoin d'explication.

Pourquoi SELECT COUNT (1 + NULL) renvoie 0 même si SELECT 1 + NULL renvoie NULL

L'exécution de n'importe quelle opération avec NULL returnnera NULL. Donc 1 + NULL returnnera NULL. Le select renvoie la valeur unique (qui est NULL) car c'est le résultat du calcul.

COUNT() fonctionne différemment selon ce qu'il count. COUNT(*) renvoie la cardinalité de la table référencée, c'est-à-dire le nombre de lignes. Mettez une expression à l'intérieur des parenthèses, cependant, et COUNT() éliminera les valeurs NULL; 1 + NULL est NULL alors COUNT (1 + NULL) élimine la valeur que vous avez fournie et renvoie 0.

Relativement pourquoi SELECT COUNT (NULL) returnne un message d'erreur Le type de type operate de type opérande est invalide pour l'opérateur count même si SELECT NULL renvoie NULL.

NULL n'a pas de type implicite donc COUNT() ne sait pas comment le gérer et renvoie une erreur.

1 + null est null , mais count() counts agrégés ne sont pas nuls, ce n'est pas comme la sum. votre exemple est comme Sum(1 +null) : = null

voir: SELECT SUM(1+ NULL),COUNT(1+ NULL)

Si nous effectuons une opération arithmétique avec NULL, le résultat sera NULL . Nous avons donc besoin de convertir cette valeur NULL en quelque chose et peut faire l'opération.

Voir ce lien Nul et fonctions agrégées

La forme COUNT () de la fonction d'agrégation COUNT renvoie le nombre de toutes les valeurs non nulles. Cela est décrit dans la documentation en ligne de SQL Server ( http://msdn.microsoft.com/en-us/library/ms175997.aspx ): «évalue l'expression pour chaque ligne d'un groupe et renvoie le nombre de valeurs non nulles». Votre premier exemple transmet une seule valeur NULL, de sorte que le nombre résultant est zéro.

En ce qui concerne l'erreur «Opérande type de données void», le message d'erreur est plus clair dans SQL Server 2012 et les versions ultérieures. Dans les versions après SQL Server 2008 R2, le message "Le type de données d'opérande NULL est invalide pour l'opérateur de count" s'affiche. en raison du type de données inconnu. Le comportement est différent lorsqu'une expression NULL non typée est renvoyée directement par une instruction SELECT. Dans ce cas, SQL Server utilise implicitement le type de données int pour les métadonnées d'expression.