Why does ANSI SQL define SUM(no rows) as NULL?
-
30-10-2019 - |
Question
The ANSI SQL standard defines (chapter 6.5, set function specification) the following behaviour for aggregate functions on empty result sets:
COUNT(...) = 0
AVG(...) = NULL
MIN(...) = NULL
MAX(...) = NULL
SUM(...) = NULL
Returning NULL for AVG, MIN and MAX makes perfect sense, since the average, minimum and maximum of an empty set is undefined.
The last one, however, bothers me: Mathematically, the SUM of an empty set is well-defined: 0
. Using 0, the neutral element of addition, as the base case makes everything consistent:
SUM({}) = 0 = 0
SUM({5}) = 5 = 0 + 5
SUM({5, 3}) = 8 = 0 + 5 + 3
SUM({5, NULL}) = NULL = 0 + 5 + NULL
Defining SUM({})
as null
basically makes "no rows" a special case that does not fit in with the others:
SUM({}) = NULL = NULL
SUM({5}) = 5 != NULL + 5 (= NULL)
SUM({5, 3}) = 8 != NULL + 5 + 3 (= NULL)
Is there some obvious advantage of the choice that was made (SUM being NULL) that I have missed?
No correct solution
Licensed under: CC-BY-SA with attribution
Not affiliated with dba.stackexchange