Mysql
 sql >> Base de données >  >> RDS >> Mysql

Somme, Moy, Max, Min, Nombre de valeurs NULL

C'est une bonne question, et qui n'a pas de bonne réponse. Le traitement de NULL dans vos deux exemples est différent.

Le problème fondamental est ce que NULL moyens. Généralement, il est utilisé pour indiquer manquant valeurs. Cependant, dans la norme ANSI, il représente un inconnu évaluer. Je suis sûr que les philosophes pourraient consacrer des tomes à la différence entre "disparu" et "inconnu".

Dans une expression simple (booléenne ou arithmétique ou scalaire d'un autre type), l'ANSI définit le résultat "inconnu" dans presque tous les cas où l'un des opérandes est "inconnu". Il existe quelques exceptions :NULL AND FALSE est faux et NULL IS NULL est vrai, mais ceux-ci sont rares.

Pour les opérations d'agrégation, pensez à SUM() comme "somme de toutes les valeurs connues", et ainsi de suite. SUM() traite NULL valeurs différentes de + . Mais ce comportement est également standard, c'est ainsi que fonctionnent toutes les bases de données.

Si vous voulez un NULL valeur pour une agrégation quand any de ses opérandes est NULL , alors vous devez utiliser CASE . Je pense que le moyen le plus simple pour une seule colonne est :

(CASE WHEN COUNT(col) = COUNT(*) THEN SUM(COL) END)