Стандарт ANSI SQL визначає (глава 6.5, задана специфікація функції) наступну поведінку для агрегованих функцій на порожніх наборах результатів:
COUNT(...) = 0
AVG(...) = NULL
MIN(...) = NULL
MAX(...) = NULL
SUM(...) = NULL
Повернення NULL для AVG, MIN та MAX має ідеальний сенс, оскільки середній, мінімальний та максимум порожнього набору не визначений.
Останній, однак, турбує мене: Математично 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), який я пропустив?