的ANSI SQL标准定义(第6.5章,集功能规范),用于空的结果集的集合函数以下行为:
COUNT(...) = 0
AVG(...) = NULL
MIN(...) = NULL
MAX(...) = NULL
SUM(...) = NULL
由于未定义空集的平均值,最小值和最大值,因此对AVG,MIN和MAX返回NULL十分合理。
但是,最后一个让我感到困扰:从数学上来说,空集的SUM是定义明确的:0
。使用0 (加法的中性元素)作为基本情况可以使所有内容保持一致:
SUM({}) = 0 = 0
SUM({5}) = 5 = 0 + 5
SUM({5, 3}) = 8 = 0 + 5 + 3
SUM({5, NULL}) = NULL = 0 + 5 + NULL
基本上定义SUM({})
为null
“无行”是一种特殊情况,不适合其他情况:
SUM({}) = NULL = NULL
SUM({5}) = 5 != NULL + 5 (= NULL)
SUM({5, 3}) = 8 != NULL + 5 + 3 (= NULL)
我错过的选择(SUM为NULL)有明显的优势吗?