admin

总和,平均,最大,最小,空值计数

sql

在MySQLSELECT 2+NULL FROM tbl_name中将返回NULL,因为MySQL无法解释NULL为数字。

但是,如果只是其中一个值,为什么SELECT SUM(quantity) FROM tbl_name不返回?这同样适用于,,,等等。因为MySQL不知道NULL可能是什么,不应该将其返回NULL所有指定的功能呢?NULL``NULL``MIN``MAX``AVG


阅读 131

收藏
2021-07-01

共1个答案

admin

这是一个很好的问题,但没有一个很好的答案。NULL您的两个示例中对的处理是不同的。

根本问题是什么NULL意思。通常,它用于表示 缺失 值。但是,在ANSI标准中,它代表 未知
值。我敢肯定,哲学家可以将书目专门放在“遗漏”和“未知”之间的区别上。

在一个简单的表达式(布尔,算术或标量的另一种形式)中,几乎在所有操作数都是“未知”的所有情况下,ANSI都会定义“未知”的结果。有一些例外: NULL AND FALSE为假且NULL IS NULL为真,但是很少见。

对于聚合操作,可以将其SUM()视为“所有已知值的总和”,依此类推。
SUM()与对待NULL价值观不同+。但是,此行为也是标准行为,因此所有数据库都是这样工作的。

如果要在NULL某个聚合操作的 任何 操作数为某个值时使用一个值NULL,则需要使用CASE。我认为单列的最简单方法是:

(CASE WHEN COUNT(col) = COUNT(*) THEN SUM(COL) END)
2021-07-01