W ANSI SQL standard określa (Rozdział 6.5, zestaw opis funkcji) następujące zachowanie zagregowanych funkcjami zbiór pusty Wynik:
COUNT(...) = 0
AVG(...) = NULL
MIN(...) = NULL
MAX(...) = NULL
SUM(...) = NULL
Zwracanie wartości NULL dla AVG, MIN i MAX ma idealny sens, ponieważ średnia, minimalna i maksymalna pustego zestawu jest niezdefiniowana.
Ten ostatni jednak denerwuje mnie: Matematycznie, suma zbioru pustego jest dobrze zdefiniowana: 0
. Używając 0, neutralny element dodawania, ponieważ podstawowy przypadek sprawia, że wszystko jest spójne:
SUM({}) = 0 = 0
SUM({5}) = 5 = 0 + 5
SUM({5, 3}) = 8 = 0 + 5 + 3
SUM({5, NULL}) = NULL = 0 + 5 + NULL
Zdefiniowanie SUM({})
jako null
zasadniczo sprawia, że „brak wierszy” jest specjalnym przypadkiem, który nie pasuje do innych:
SUM({}) = NULL = NULL
SUM({5}) = 5 != NULL + 5 (= NULL)
SUM({5, 3}) = 8 != NULL + 5 + 3 (= NULL)
Czy jest jakaś oczywista zaleta dokonanego wyboru (SUMA ma wartość NULL), którego przegapiłem?