Question

La La norme ANSI SQL définit (Chapitre 6.5, Spécification des fonctions de définition) Le comportement suivant pour les fonctions agrégées sur les ensembles de résultats vides:

COUNT(...) = 0
AVG(...) = NULL
MIN(...) = NULL
MAX(...) = NULL
SUM(...) = NULL

Le retour null pour AVG, Min et Max est parfaitement logique, car la moyenne, le minimum et le maximum d'un ensemble vide n'est pas défini.

Le dernier, cependant, me dérange: mathématiquement, la somme d'un ensemble vide est bien définie: 0. En utilisant 0, le élément neutre d'addition, car le cas de base rend tout cohérent:

SUM({})        = 0    = 0
SUM({5})       = 5    = 0 + 5
SUM({5, 3})    = 8    = 0 + 5 + 3
SUM({5, NULL}) = NULL = 0 + 5 + NULL

Déterminant SUM({}) comme null Fondamentalement, «pas de lignes» un cas spécial qui ne correspond pas aux autres:

SUM({})     = NULL  = NULL
SUM({5})    = 5    != NULL + 5 (= NULL)
SUM({5, 3}) = 8    != NULL + 5 + 3 (= NULL)

Y a-t-il un avantage évident du choix qui a été fait (somme nul) que j'ai manqué?

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top