On Thu, Sep 08, 2005 at 05:16:30PM -0400, D. Richard Hipp wrote: > So SQL sez: > > SUM(<empty-set>) == NULL > SUM(<all-nulls>) == NULL > SUM(<some-nulls>) == Sum of non-null values > > Martin sez: > > SUM(<empty-set>) == 0 > SUM(<all-nulls>) == NULL > SUM(<some-nulls>) == NULL > > SQLite 3.2.5 does this: > > SUM(<empty-set>) == 0 > SUM(<all-nulls>) == 0 > SUM(<some-nulls>) == Sum of non-null values > > I can understand Martin's point of view. The SQL standard > point of view makes no sense to me at all.
Note that all three of the above systems define SUM(<empty-set>) to be an identity element such that: SUM(SUM(X), SUM(<empty-set>)) = SUM(X) However, the following system breaks the identity: SUM(<empty-set>) == 0 SUM(<all-nulls>) == NULL SUM(<some-nulls>) == Sum of non-null values SUM(SUM(<all-nulls>), SUM(<empty-set>)) = SUM(NULL, 0) = 0 != SUM(<all-nulls>) So for a mathematically consistent definition of SUM, it makes sense that SUM(<empty-set>) == NULL if SUM(<all-nulls>) == NULL. - glen