Standar ANSI SQL mendefinisikan (bab 6.5, mengatur spesifikasi fungsi) perilaku berikut untuk fungsi agregat pada set hasil kosong:
COUNT(...) = 0
AVG(...) = NULL
MIN(...) = NULL
MAX(...) = NULL
SUM(...) = NULL
Mengembalikan NULL untuk AVG, MIN, dan MAX sangat masuk akal, karena rata-rata, minimum, dan maksimum dari set kosong tidak ditentukan.
Yang terakhir, bagaimanapun, mengganggu saya: Secara matematis, SUM dari himpunan kosong adalah didefinisikan dengan baik: 0
. Menggunakan 0, elemen netral penambahan, karena casing dasar membuat semuanya konsisten:
SUM({}) = 0 = 0
SUM({5}) = 5 = 0 + 5
SUM({5, 3}) = 8 = 0 + 5 + 3
SUM({5, NULL}) = NULL = 0 + 5 + NULL
Mendefinisikan SUM({})
sebagai null
dasarnya membuat "tidak ada baris" kasus khusus yang tidak cocok dengan orang lain:
SUM({}) = NULL = NULL
SUM({5}) = 5 != NULL + 5 (= NULL)
SUM({5, 3}) = 8 != NULL + 5 + 3 (= NULL)
Apakah ada beberapa keuntungan nyata dari pilihan yang dibuat (SUM sedang NULL) yang saya lewatkan?