Các định nghĩa ANSI SQL tiêu chuẩn (chương 6.5, bộ chức năng đặc điểm kỹ thuật) các hành vi sau đây cho các chức năng tổng hợp về bộ kết quả rỗng:
COUNT(...) = 0
AVG(...) = NULL
MIN(...) = NULL
MAX(...) = NULL
SUM(...) = NULL
Trả lại NULL cho AVG, MIN và MAX có ý nghĩa hoàn hảo, vì mức trung bình, tối thiểu và tối đa của một tập hợp trống không được xác định.
Tuy nhiên, cái cuối cùng làm phiền tôi: Về mặt toán học, SUM của một tập hợp trống được xác định rõ : 0
. Sử dụng 0, phần tử trung tính của phép cộng, như trường hợp cơ sở làm cho mọi thứ nhất quán:
SUM({}) = 0 = 0
SUM({5}) = 5 = 0 + 5
SUM({5, 3}) = 8 = 0 + 5 + 3
SUM({5, NULL}) = NULL = 0 + 5 + NULL
Xác định SUM({})
như null
về cơ bản làm cho "không có hàng" một trường hợp đặc biệt không phù hợp với những người khác:
SUM({}) = NULL = NULL
SUM({5}) = 5 != NULL + 5 (= NULL)
SUM({5, 3}) = 8 != NULL + 5 + 3 (= NULL)
Có một số lợi thế rõ ràng của sự lựa chọn đã được thực hiện (SUM là NULL) mà tôi đã bỏ lỡ?