Pourquoi ANSI SQL définit-il la somme (pas de lignes) comme nul?
-
30-10-2019 - |
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