Der ANSI-SQL-Standard definiert (Kapitel 6.5, Festlegen der Funktionsspezifikation) das folgende Verhalten für Aggregatfunktionen in leeren Ergebnismengen:
COUNT(...) = 0
AVG(...) = NULL
MIN(...) = NULL
MAX(...) = NULL
SUM(...) = NULL
Die Rückgabe von NULL für AVG, MIN und MAX ist absolut sinnvoll, da der Durchschnitt, das Minimum und das Maximum einer leeren Menge undefiniert sind.
Die letzte, aber ich stört: Mathematisch die Summe von einer leeren Menge wohldefiniert: 0
. Mit 0, dem neutralen Element der Addition, als Basisfall wird alles konsistent:
SUM({}) = 0 = 0
SUM({5}) = 5 = 0 + 5
SUM({5, 3}) = 8 = 0 + 5 + 3
SUM({5, NULL}) = NULL = 0 + 5 + NULL
Wenn Sie "keine Zeilen" SUM({})
als " null
grundsätzlich" definieren, ist dies ein Sonderfall, der nicht zu den anderen passt:
SUM({}) = NULL = NULL
SUM({5}) = 5 != NULL + 5 (= NULL)
SUM({5, 3}) = 8 != NULL + 5 + 3 (= NULL)
Gibt es einen offensichtlichen Vorteil der getroffenen Wahl (SUMME ist NULL), den ich verpasst habe?