SQLite 忽略 min 函数的空值

SQLite ignore null values for min function

我刚刚注意到以下查询:

select min(null,0);

returns null 而我期待得到 0...(与 max 函数相同)

文档中说,如果只比较空值,min() 将 return 为空。有人可以解释我如何忽略 null 值以获得与 null 进行比较时的实际值吗?

你可以试试

select IFNULL(MIN(NULL),0)
select IFNULL(MAX(NULL),0)

IFNULL Document

SQLFiddle

用作聚合函数的MIN与用作标量[=32]的MIN之间存在差异=] 函数。 MIN 作为聚合函数当然会忽略 NULL 值(大多数聚合函数也是如此)。这意味着以下列的最小值是 3:

col
NULL
3
NULL

但是,SQLite 也提供 MIN 作为 标量 函数。此处忽略 NULL 值的一种方法是将此类空值合并为最大可能的整数值 9223372036854775807,例如

SELECT MIN(COALESCE(col1, 9223372036854775807),
           COALESCE(col2, 9223372036854775807),
           COALESCE(col3, 9223372036854775807)) AS min_value
FROM yourTable;

这里如果一个值是 NULL 那么我们用一个非常大的值替换它,然后将它作为最小的数字考虑。如果您可能将所有列设为 NULL,那么您可以使用 CASE 表达式包装上述对 MIN 的调用。