这是一个很好的问题,但没有一个很好的答案。
NULL您的两个示例中对的处理是不同的。
根本问题是什么
NULL意思。通常,它用于表示 缺失 值。但是,在ANSI标准中,它代表 未知
值。我敢肯定,哲学家可以将书目专门放在“遗漏”和“未知”之间的区别上。
在一个简单的表达式(布尔,算术或标量的另一种形式)中,几乎在所有操作数都是“未知”的所有情况下,ANSI都会定义“未知”的结果。有一些例外:
NULLAND FALSE为假且
NULL IS NULL为真,但是很少见。
对于聚合操作,可以将其
SUM()视为“所有已知值的总和”,依此类推。
SUM()与对待
NULL价值观不同
+。但是,此行为也是标准行为,因此所有数据库都是这样工作的。
如果要在
NULL某个聚合操作的 任何 操作数为某个值时使用一个值
NULL,则需要使用
CASE。我认为单列的最简单方法是:
(CASE WHEN COUNT(col) = COUNT(*) THEN SUM(COL) END)



