ANSI SQL標準定義(章6.5、セット機能仕様)空の結果セット上の集約関数の次の動作:
COUNT(...) = 0
AVG(...) = NULL
MIN(...) = NULL
MAX(...) = NULL
SUM(...) = NULL
空のセットの平均、最小、最大は定義されていないため、AVG、MIN、MAXにNULLを返すことは完全に理にかなっています。
ただし、最後の1つは気になります。数学的には、空のセットの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)の明らかな利点はありますか?